我需要为我的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
SubFormB1
和SubFormB2
- >从FormB
SubFormC1
- >从FormC
当然它可以更深入。
根据其角色,用户可以执行以下操作:
Admin
MainForm
以及从中调用的所有表单FormC
(和SubFormC1
)Operator
MainForm
和FormA
(和SubFormA1
)FormB
和FormC
(以及SubFormB1
SubFormB2
,SubFormC1
)Service
MainForm
和FormC
FormB
和FormA
(以及SubFormA1
,SubFormB1
)应用程序的入口点是LoginForm
,它将在应用程序运行时作为第一个表单启动。用户输入他的凭证,如果有效,则将其传递给MainForm
。
现在问题:
MainForm
?我正在考虑创建一个额外的实体来保留表单名称列表,特定帐户角色可以访问该列表,但这似乎不是正确的方法。
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}
}
有关如何处理此事的任何建议?