SpringSecurity----RBAC权限控制模型,和权限相关知识点整理

SpringSecurity----RBAC权限控制模型,和权限相关知识点整理
Spring Security----RBAC权限控制模型
我们开发⼀个系统,必然⾯临权限控制的问题,即不同的⽤户具有不同的访问、操作数据权限。形成理论的权限控制模型有:⾃主访问控制(DAC: Discretionary Access Control)、强制访问控制(MAC: Mandatory Access Control)、基于属性的权限验证(ABAC: Attribute-Based Access Control)等。最常被开发者使⽤也是相对易⽤、通⽤的就是RBAC权限模型(Role-Based Access Control),本⽂就将向⼤家介绍该权限模型。
RBAC权限模型简介
RBAC权限模型(Role-Based Access Control)即:基于⾓⾊的权限控制。模型中有⼏个关键的术语:
⽤户:系统接⼝及功能访问的操作者
权限:能够访问某接⼝或者做某操作的授权资格
⾓⾊:具有⼀类相同操作权限的⽤户的总称
RBAC权限模型核⼼授权逻辑如下:
某⽤户是什么⾓⾊?
某⾓⾊具有什么权限?
通过⾓⾊的权限推导⽤户的权限
RBAC的演化进程针式吸盘
⽤户与权限直接关联
想到权限控制,⼈们最先想到的⼀定是⽤户与权限直接关联的模式,简单地说就是:某个⽤户具有某些权限。如图: 张三具有创建⽤户和删除⽤户的权限,所以他可能系统维护⼈员
李四具有产品记录管理和销售记录管理权限,所以他可能是⼀个业务销售⼈员
这种模型能够清晰的表达⽤户与权限之间的关系,⾜够简单。但同时也存在问题:
现在⽤户是张三、李四,以后随着⼈员增加,每⼀个⽤户都需要重新授权
或者张三、李四离职,需要针对每⼀个⽤户进⾏多种权限的回收
⼀个⽤户拥有⼀个⾓⾊
在实际的团体业务中,都可以将⽤户分类。⽐如对于薪⽔管理系统,通常按照级别分类:经理、⾼级⼯程师、中级⼯程师、初级⼯程师。也就是按照⼀定的⾓⾊分类,通常具有同⼀⾓⾊的⽤户具有相同的权限。这样改变之后,就可以将针对⽤户赋权转换为针对⾓⾊赋权。因为⾓⾊少、权限多,所以基于⾓⾊管理权限,减少⽤户在授权与权限回收过程中的过多操作。
⼀个⽤户有⼀个⾓⾊
客户端开发⼀个⾓⾊有多个操作(菜单)权限
⼀个操作权限可以赋予多个⾓⾊
我们可以⽤下图中的数据库设计模型,描述这样的关系。
⼀个⽤户⼀个或多个⾓⾊
但是在实际的应⽤系统中,⼀个⽤户⼀个⾓⾊远远满⾜不了需求。如果我们希望⼀个⽤户既担任销售
智能无线测温装置⾓⾊、⼜暂时担任副总⾓⾊。该怎么做呢?为了增加系统设计的适⽤性,我们通常设计:
⼀个⽤户有⼀个或多个⾓⾊
⼀个⾓⾊包含多个⽤户
⼀个⾓⾊有多种权限
⼀个权限可以赋予多个⾓⾊
我们可以⽤下图中的数据库设计模型,描述这样的关系。
sys_user是⽤户信息表,⽤于存储⽤户的基本信息,如:⽤户名、密码
aaaaaaaaaaaaaaaaaasys_role是⾓⾊信息表,⽤于存储系统内所有的⾓⾊
sys_menu是系统的菜单信息表,⽤于存储系统内所有的菜单。⽤id与⽗id的字段关系维护⼀个菜单树形结构。
sys_user_role是⽤户⾓⾊多对多关系表,⼀条userid与roleid的关系记录表⽰该⽤户具有该⾓⾊,该⾓⾊包含该⽤户。
sys_role_menu是⾓⾊菜单(权限)关系表,⼀条roleid与menuid的关系记录表⽰该⾓⾊由某菜单权限,该菜单权限可以被某⾓⾊访问。
CS CN页⾯访问权限与操作权限
刹车锅
页⾯访问权限:
所有系统都是由⼀个个的页⾯组成,页⾯再组成模块,⽤户是否能看到这个页⾯的菜单、是否能进⼊这个页⾯就称为页⾯访问权限。
操作权限:
⽤户在操作系统中的任何动作、交互都需要有操作权限,如增删改查等。⽐如:某个按钮,某个超链接⽤户是否可以点击,是否应该看见的权限。
为了适应这种需求,我们可以把页⾯资源(菜单)和操作资源(按钮)分表存放,如上图。也可以把⼆者放到⼀个表⾥⾯存放,⽤⼀个字段进⾏标志区分。
数据权限
数据权限⽐较好理解,就是某个⽤户能够访问和操作哪些数据。
通常来说,数据权限由⽤户所属的组织来确定。⽐如:⽣产⼀部只能看⾃⼰部门的⽣产数据,⽣产⼆部只能看⾃⼰部门的⽣产数据;销售部门只能看销售数据,不能看财务部门的数据。⽽公司的总经理可以看所有的数据。
在实际的业务系统中,数据权限往往更加复杂。⾮常有可能销售部门可以看⽣产部门的数据,以确定销售策略、安排计划等。
所以为了⾯对复杂的需求,数据权限的控制通常是由程序员书写个性化的SQL来限制数据范围的,⽽不是交给权限模型或者Spring Security或shiro来控制。当然也可以从权限模型或者权限框架的⾓度去解决这个问题,但适⽤性有限。
动态加载⽤户⾓⾊权限数据
我们所有的⽤户、⾓⾊、权限信息都是在配置⽂件⾥⾯写死的,然⽽在实际的业务系统中,这些信息通常是存放在RBAC权限模型的数据库表中的。
下⾯来把这些信息从数据库⾥⾯进⾏加载。
下⾯我们来回顾⼀下其中的核⼼概念:

本文发布于:2024-09-21 12:41:02,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/99998.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:权限   数据   模型   操作   菜单
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议