在使用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
呈现的相应商家Model
外,还应该知道View
。
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
执行?还有其他更有希望的方法吗?
感谢。
答案 0 :(得分:1)
&#34;演示者对模型和视图起作用。它从存储库(模型)中检索数据,并将其格式化以在视图中显示。&#34; - MVP
所以演示者格式化数据,但对我来说,演示者看起来像包含一种业务逻辑 - 它确实检查用户是否可以修改帐户。如果您忘记了其中一种表格的支票,该怎么办?所以它应该在底层(可能是服务)。