c#EF winforms:对特定表单的基于角色的访问权限

时间:2017-07-11 07:22:00

标签: c# winforms entity-framework authentication authorization

我需要为我的WinForms应用提供一些授权/身份验证机制,以便具有特定Role的用户具有明确定义的应用内表单访问级别。

我的数据库中有一个基本的User实体:

public class User
{
    public int UserId {get; set;}
    public string Login {get; set;}
    public string Password {get; set;} (encrypted of cource)
    public UserRole Role {get; set;}
}

public enum UserRole 
{   
    Admin,
    Service,
    Operator
}

让我们说我的应用程序包含以下形式:

  • MainForm - 带有导航菜单的主窗体,可以调用其他窗体。
  • FormA - >从MainForm
  • 调用
  • FormB - >从MainForm
  • 调用
  • FormC - >从MainForm
  • 调用
  • SubFormA1 - >从FormA
  • 调用
  • SubFormB1SubFormB2 - >从FormB
  • 调用
  • SubFormC1 - >从FormC
  • 调用

当然它可以更深入。

根据其角色,用户可以执行以下操作:

  • Admin
    • 完全访问:MainForm以及从中调用的所有表单
    • 无法访问FormC(和SubFormC1
  • Operator
    • 完全访问:MainFormFormA(和SubFormA1
    • 只读(预览)访问:FormBFormC(以及SubFormB1 SubFormB2SubFormC1
  • Service
    • 完全访问MainFormFormC
    • 只读(预览)访问FormBFormA(以及SubFormA1SubFormB1

应用程序的入口点是LoginForm,它将在应用程序运行时作为第一个表单启动。用户输入他的凭证,如果有效,则将其传递给MainForm

现在问题:

  1. 如何以及在何处存储有关整个应用中当前登录用户的信息?
    • MainForm
    • 中作为属性(包含加密数据)
  2. 如何保护每一种表格?
  3. 我正在考虑创建一个额外的实体来保留表单名称列表,特定帐户角色可以访问该列表,但这似乎不是正确的方法。

    public class FormPermission
    {
        public int FormPermissionId {get;set;}
        public string FormName {get;set;}
        public FormPermissionType PermissionType {get; set;}
        public virtual RolePermission {get; set;}
    }
    
    public enum FormPermissionType
    {
        Full,
        ReadOnly,
        NoPermission
    }
    
    public class RolePermission
    {
        public int RolePermissionId {get;set;}
        public virtual ICollection<FormPermission> Permissions {get;set}
    }
    

    有关如何处理此事的任何建议?

0 个答案:

没有答案