基于权限的安全模型

时间:2014-06-08 05:52:07

标签: c# .net winforms permissions mvp

在使用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执行?还有其他更有希望的方法吗?

感谢。

1 个答案:

答案 0 :(得分:1)

&#34;演示者对模型和视图起作用。它从存储库(模型)中检索数据,并将其格式化以在视图中显示。&#34; - MVP

所以演示者格式化数据,但对我来说,演示者看起来像包含一种业务逻辑 - 它确实检查用户是否可以修改帐户。如果您忘记了其中一种表格的支票,该怎么办?所以它应该在底层(可能是服务)。