前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一篇文章让你学会权限项目中,数据库的设计!

一篇文章让你学会权限项目中,数据库的设计!

作者头像
Java编程指南
发布2019-12-03 14:54:28
4500
发布2019-12-03 14:54:28
举报
文章被收录于专栏:Java编程指南Java编程指南

本文地址:cnblogs.com/myindex/p/9116177.html

权限设计这一块,松哥在微人事中和大家聊了很多,也做了动态权限管理,不过,权限这里,永远有值得说的话题,因为每个项目都会涉及到权限管理,而不同项目在需求上又会有些许差异。刚好昨天看到一篇关于权限的干货,今天拿来和各位小伙伴们分享一下。希望能对小伙伴们有所启发。另外再悄悄告诉大家,公众号后台回复 2TB 可以领取超 2TB 免费 Java 学习资源哦。

我们比较常见的就是基于角色的访问控制,用户通过角色与权限进行关联。简单地说,一个用户拥有多个角色,一个角色拥有多个权限。这样,就构造成 “用户-角色-权限” 的授权模型。在这种模型中,用户与角色之间、角色与权限之间,通常都是多对多的关系。如下图:

基于这个,得先了解角色到底是什么?我们可以理解它为一定数量的权限的集合,是一个权限的载体。

例如:一个论坛的“管理员”、“版主”,它们都是角色。但是所能做的事情是不完全一样的,版主只能管理版内的贴子,用户等,而这些都是属于权限,如果想要给某个用户授予这些权限,不用直接将权限授予用户,只需将“版主”这个角色赋予该用户即可。

但是通过上面我们也发现问题了,如果用户的数量非常大的时候,就需要给系统的每一个用户逐一授权(分配角色),这是件非常繁琐的事情,这时就可以增加一个用户组,每个用户组内有多个用户,除了给单个用户授权外,还可以给用户组授权,这样一来,通过一次授权,就可以同时给多个用户授予相同的权限,而这时用户的所有权限就是用户个人拥有的权限与该用户所在组所拥有的权限之和。用户组、用户与角色三者的关联关系如下图:

通常在应用系统里面的权限我们把它表现为菜单的访问(页面级)、功能模块的操作(功能级)、文件上传的删改,甚至页面上某个按钮、图片是否可见等等都属于权限的范畴。有些权限设计,会把功能操作作为一类,而把文件、菜单、页面元素等作为另一类,这样构成“用户-角色-权限-资源”的授权模型。而在做数据表建模时,可把功能操作和资源统一管理,也就是都直接与权限表进行关联,这样可能更具便捷性和易扩展性。如下图:

这里特别需要注意以下权限表中有一列“PowerType(权限类型)”,我们根据它的取值来区分是哪一类权限,可以把它理解为一个枚举,如“MENU”表示菜单的访问权限、“OPERATION”表示功能模块的操作权限、“FILE”表示文件的修改权限、“ELEMENT”表示页面元素的可见性控制等。

这样设计的好处有两个:

一、不需要区分哪些是权限操作,哪些是资源 ,(实际上,有时候也不好区分,如菜单,把它理解为资源呢还是功能模块权限呢?);

二、方便扩展,当系统要对新的东西进行权限控制时,我只需要建立一个新的关联表“权限XX关联表”,并确定这类权限的权限类型字符串即可。

需要注意的是,权限表与权限菜单关联表、权限菜单关联表与菜单表都是一对一的关系。(文件、页面权限点、功能操作等同理)。也就是每添加一个菜单,就得同时往这三个表中各插入一条记录。

这样,可以不需要权限菜单关联表,让权限表与菜单表直接关联,此时,须在权限表中新增一列用来保存菜单的ID,权限表通过“权限类型”和这个ID来区分是种类型下的哪条记录。最后扩展出来的模型完整设计如下图:

注意上面我额外增加了一个操作日志表;

随着系统的日益庞大,为了方便管理,如果有需要可引入角色组对角色进行分类管理,跟用户组不同,角色组不参与授权。

例如:当遇到有多个子公司,每个子公司下有多个部门,这是我们就可以把部门理解为角色,子公司理解为角色组,角色组不参于权限分配。另外,为方便上面各主表自身的管理与查找,可采用树型结构,如菜单树、功能树等,当然这些可不需要参于权限分配。

数据字典:

1.用户表:
2.角色表:
3.用户与角色关联表
4.用户组表
5.用户组与用户信息关联表
6.用户组与角色关联表
7.菜单表
8.页面元素表
9.文件表
10.权限表
11.权限与菜单关联表
12.权限与页面元素关联表
13.权限与文件关联表
14.功能操作表
15.权限与功能操作关联表
16.角色与权限关联表
17.操作日志表
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java编程指南 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据字典:
    • 1.用户表:
      • 2.角色表:
        • 3.用户与角色关联表
          • 4.用户组表
            • 5.用户组与用户信息关联表
              • 6.用户组与角色关联表
                • 7.菜单表
                  • 8.页面元素表
                    • 9.文件表
                      • 10.权限表
                        • 11.权限与菜单关联表
                          • 12.权限与页面元素关联表
                            • 13.权限与文件关联表
                              • 14.功能操作表
                                • 15.权限与功能操作关联表
                                  • 16.角色与权限关联表
                                    • 17.操作日志表
                                    相关产品与服务
                                    访问管理
                                    访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
                                    领券
                                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档