在使用MVP模式(对于小型客户端)的windows窗体薪资应用程序中,我计划按以下方式(基于权限)处理用户权限,因为它的实现应该不那么复杂和直接。
注意到:系统可以同时被少数用户使用(最多3),数据库在服务器端。
这是我的UserModel。每个用户都有给他们的权限列表。
class User
{
string UserID { get; set; }
string Name { get; set; }
string NIC {get;set;}
string Designation { get; set; }
string PassWord { get; set; }
List <string> PermissionList = new List<string>();
bool status { get; set; }
DateTime EnteredDate { get; set; }
}当用户登录到系统时,它将使当前用户保持在内存中。
例如,在BankAccountDetailEntering视图中,我可以控制访问命令按钮的权限,如下所示。
public partial class BankAccountDetailEntering : Form
{
bool AccountEditable {get; set;}
public BankAccountDetailEntering ()
{
InitializeComponent();
}
private void BankAccountDetailEntering_Load(object sender, EventArgs e)
{
cmdEditAccount.enabled = false;
OnLoadForm (sender, e); // Event fires...
If (AccountEditable )
{
cmdEditAccount.enabled=true;
}
}
}为此,我的所有相关演讲者(如BankAccountDetailPresenter)都应该知道UserModel,以及它向View展示的相应的业务Model。
class BankAccountDetailPresenter
{
BankAccountDetailEntering _View;
BankAccount _Model;
User _UserModel;
DataService _DataService;
BankAccountDetailPresenter( BankAccountDetailEntering view, BankAccount model, User userModel, DataService dataService )
{
_View=view;
_Model = model;
_UserModel = userModel;
_DataService = dataService;
WireUpEvents();
}
private void WireUpEvents()
{
_View.OnLoadForm += new EventHandler(_View_OnLoadForm);
}
private void _View_OnLoadForm(Object sender, EventArgs e)
{
foreach(string s in _UserModel.PermissionList)
{
If( s =="CanEditAccount")
{
_View.AccountEditable =true;
return;
}
}
}
public Show()
{
_View.ShowDialog();
}
}因此,我正在处理演示者中遍历列表的用户权限。这应该在Presenter或View中执行吗?还有其他更有希望的方法吗?
谢谢。
发布于 2014-06-11 00:00:59
“演示者对模型和视图进行操作。它从存储库(模型)检索数据,并将其格式化以在视图中显示。”- MVP。
因此,演示者格式化数据,但对我来说,它似乎包含某种业务逻辑-它真的检查用户是否可以修改帐户。如果你把这张支票忘在其中一张表格里怎么办?因此,它应该位于底层(可能是服务)。
https://stackoverflow.com/questions/24103400
复制相似问题