Skip to content
.NET 开发者指北.NET 开发者指北
CMS
.NET指北
FreeKit
Docker
关于
博客
github icon
    • 文件上传系统
      • 行为日志
        • 基于 RBAC 实现权限设计
          • 1. 用户表 lin_user
            • 2. 分组表 lin_group
              • 3. 用户分组表 lin_user_group
                • 4. 权限表 lin_permission
                  • 5. 分组权限表 lin_group_permission
                    • 6. 用户身份认证登录表 lin_user_identity
                      • 字典管理
                        • 1.base_type (字典类别管理)
                          • 2.base_item (字典管理)
                            • lin_file 文件存储
                              • lin_log 日志记录
                            • 方法级别的权限控制(API级别)
                              • LinCms.Scaffolding 代码生成器
                                • Autofac 依赖注入小知识
                                  • ASP.NETCore 下 FreeSql 的仓储事务

                                  基于 RBAC 实现权限设计

                                  calendar icon2020年5月13日timer icon大约 4 分钟word icon约 1134 字

                                  此页内容
                                  • 1. 用户表 lin_user
                                  • 2. 分组表 lin_group
                                  • 3. 用户分组表 lin_user_group
                                  • 4. 权限表 lin_permission
                                  • 5. 分组权限表 lin_group_permission
                                  • 6. 用户身份认证登录表 lin_user_identity
                                  • 字典管理
                                    • 1.base_type (字典类别管理)
                                    • 2.base_item (字典管理)
                                    • lin_file 文件存储
                                    • lin_log 日志记录

                                  # 基于 RBAC 实现权限设计

                                  功能:实现一个用户设置多个分组,分组可以设置多个权限,权限与后台 API 方法对应,前端菜单绑定权限编码,前端按钮绑定权限编码,从而实现用户可配置权限,从而控制界面上的元素等。

                                  # 1. 用户表 lin_user

                                  字段备注类型
                                  id主键 Idbigint
                                  username用户名varchar
                                  nickname昵称varchar
                                  phone_number手机号varchar
                                  avatar用户默认生成图像,为 null、头像 urlvarchar
                                  email电子邮箱varchar
                                  active1 激活 2 非激活int

                                  # 2. 分组表 lin_group

                                  字段备注类型
                                  id主键 Idbigint
                                  name权限组名称varchar
                                  info权限组描述varchar
                                  is_static是否是静态分组bit

                                  # 3. 用户分组表 lin_user_group

                                  用户分组表。用于用户和分组表的关联。可配置一个用户属于多个分组。

                                  字段备注类型
                                  id主键 Idbigint
                                  user_id用户 IDbigint
                                  group_id分组 IDbigint

                                  # 4. 权限表 lin_permission

                                  权限表,本系统通过反射在系统初次启动时,启动异步任务,将不存在的权限新增到此表中。

                                  字段备注类型
                                  id主键 Idbigint
                                  module权限所属模块,例如:人员管理varchar
                                  name所属权限、权限名称,例如:访问首页varchar

                                  # 5. 分组权限表 lin_group_permission

                                  分组权限表,用于分组与权限表的关联

                                  字段备注类型
                                  id主键 Idbigint
                                  group_id分组 Idbigint
                                  permission_id权限 Idbigint

                                  # 6. 用户身份认证登录表 lin_user_identity

                                  用户授权信息表,用于存储不同登录类型的用户信息,如手机号、邮件、用户名、第三方应用(微信、QQ、GitHub)的登录

                                  字段备注类型
                                  idchar主键 Id
                                  identity_typevarchar认证类型 Password,GitHub、QQ、WeiXin 等
                                  identifiervarchar认证者,例如 用户名,手机号,邮件等,
                                  credentialvarchar凭证,例如 密码,存 OpenId、Id,同一 IdentityType 的 OpenId 的值是唯一的
                                  create_user_idbigint绑定的用户 Id
                                  create_timedatetime

                                  # 字典管理

                                  主要功能:仅限于通用的下拉列表选择,有变化的可能性。抽象成统一的配置项。

                                  比如:文章是(原创,转载,翻译),性别是(男,女)。当然更多,在下文会有介绍。

                                  # 1.base_type (字典类别管理)

                                  字段类型备注
                                  idint
                                  type_codevarchar(50)类别编码
                                  full_namevarchar(50)全称
                                  sort_codeint排序码

                                  # 2.base_item (字典管理)

                                  字段类型备注
                                  idint
                                  base_type_idint类别 id(关联 base_type 的 id)
                                  item_codevarchar(50)字典编码
                                  item_namevarchar(50)字典全称
                                  sort_codeint排序码

                                  BaseType 1 对 BaseItem 多。

                                  如:标签管理,一个文章下可以设置多个标签,原本需要设计表 Tag,字段也大抵为 Id,Name,Sort 及关联表。 我们使用 BaseType、BaseItem 实现。 BaseType 中 TypeCode 为 tag,FullName 为标签,id 为 1 时。 BaseItem 中 BaseTypeId 为 1,ItemCode 为编码,ItemName 为标签。ItemCode 为不重复的字符串即可。

                                  另 Tag 与 Article 的关联表,需要另设计一个表。

                                  当我们要实现文章类别的下拉,原本需要设计一个表 ArticleType,有字段,id,name,sort 等。 我们可以通过 BaseType、BaseItem 来实现,从而简化这些基础数据。 BaseType 有一条数据,TypeCode 为 字符串 category、FullName 文章类别,BaseItem 存多个文章类别(Java、大数据、Python、C#等),编码不同即可。

                                  但现实总是事与愿违,后台取文章列表时,想要取出文章对应的分类,手动 join 时,总觉得 join 的表会有些奇怪。

                                  当然还有其他原因,局限性:

                                  1. 比如使用了这个字典,分类需要增加一个图片字段,就不能满足要求,那怎么办呢,做不了。
                                  2. 比如标签需要实现这个标签下有多少个文章,通过统计也能实现,

                                  使用 FreeSql 实现时,如果二个表之间没有导航属性,是更复杂的。

                                  # lin_file 文件存储

                                  | 字段 | 类型 | 备注 | | -------------- | -------- | ---------------------------------------- | ------- | | id | | bigint | 主键 Id | | extension | varchar | 后缀 | | md5 | varchar | 图片 md5 值,防止上传重复图片 | | name | varchar | 名称 | | path | varchar | 路径 | | size | bigint | 大小 | | type | smallint | 1 local,2 代表七牛云 3 其他表示其他地方 | | create_user_id | bigint | 创建者 ID |

                                  # lin_log 日志记录

                                  字段类型备注
                                  idbigint主键 Id
                                  authorityvarchar访问哪个权限
                                  messagevarchar日志信息
                                  methodvarchar请求方法
                                  pathvarchar请求路径
                                  status_codeint请求的 http 返回码
                                  timedatetime日志创建时间
                                  user_idbigint用户 id
                                  user_namevarchar用户当时的昵称
                                  other_messagelongtext
                                  edit icon在 GitHub 上编辑此页open in new window
                                  上次编辑于: 2022/9/13 11:34:29
                                  贡献者: luoyunchong,igeekfan,igeekfan
                                  上一页
                                  行为日志
                                  下一页
                                  方法级别的权限控制(API级别)
                                  MIT Licensed | Copyright © 2021-present luoyunchong
                                  苏ICP备16046457号-1

                                  该应用可以安装在你的 PC 或移动设备上。这将使该 Web 应用程序外观和行为与其他应用程序相同。它将在出现在应用程序列表中,并可以固定到主屏幕,开始菜单或任务栏。此 Web 应用程序还将能够与其他应用程序和你的操作系统安全地进行交互。

                                  详情