基于角色访问控制(RBAC)的主要思路是以角色为“桥梁”连接用户与资源,而角色对资源的访问控制又是通过授权许可来完成。菜单是一种特殊的资源,不过为了从技术上和业务上方便操作,可以将其单独抽出来,做为一种独立的“资源”处理。开始之前需要理解授权与认证,此处没有对认证的处理,默认流程走到授权时都是认证通过的。

1.新建/生成实体

  依次为菜单表(Menu)描述系统菜单项,以URI做为基本控制单元;授权许可表(Permission)描述系统可授予的许可,同样以URI做为基本控制单元;角色表(Role)描述系统可以授予用户的角色;权限类别表(PermissionCategory)描述权限的类别,主要作用是为权限归类,该类别可以根据实际业务自定义。剩下的实体表示数据之间的关联关系,如MenuInRole表示菜单与角色的对应关系,PermissionInRole表示许可与角色的对应关系,UserInRole表示用户与角色的对应关系。因之前已经创建了授权表结构,所以这里的实体是通过EFCore的逆向工程自动生成的。示例如下:

 1     /// <summary>
 2     /// Menu
 3     /// </summary>
 4     public class Menu
 5     {
 6         /// <summary>
 7         /// Id
 8         /// </summary>
 9         public string Id { get; set; }
10         /// <summary>
11         /// Name
12         /// </summary>
13         public string Name { get; set; }
14         /// <summary>
15         /// Label
16         /// </summary>
17         public string Label { get; set; }
18         /// <summary>
19         /// Icon
20         /// </summary>
21         public string Icon { get; set; }
22         /// <summary>
23         /// Uri
24         /// </summary>
25         public string Uri { get; set; }
26         /// <summary>
27         /// Parent Id
28         /// </summary>
29         public string ParentId { get; set; }
30         /// <summary>
31         /// Sort
32         /// </summary>
33         public int? Sort { get; set; }
34         /// <summary>
35         /// Is Deleted
36         /// </summary>
37         public bool IsDeleted { get; set; }
38         /// <summary>
39         /// Created By
40         /// </summary>
41         public string CreatedBy { get; set; }
42         /// <summary>
43         /// Created Time
44         /// </summary>
45         [Column(TypeName = "timestamp")]
46         public DateTime CreatedTime { get; set; }
47         /// <summary>
48         /// Last Updated By
49         /// </summary>
50         public string LastUpdatedBy { get; set; }
51         /// <summary>
52         /// Last Updated Time
53         /// </summary>
54         [Column(TypeName = "timestamp")]
55         public DateTime LastUpdatedTime { get; set; }
56 
57         /// <summary>
58         /// Menu In Roles
59         /// </summary>
60         public virtual ICollection<MenuInRole> MenuInRoles { get; set; }
61     }
Menu

相关文章:

  • 2021-07-02
  • 2021-06-15
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-08
  • 2021-12-30
  • 2022-12-23
猜你喜欢
  • 2021-04-04
  • 2022-12-23
  • 2022-12-23
  • 2021-05-15
  • 2022-12-23
  • 2021-10-03
  • 2021-09-07
相关资源
相似解决方案