标签:member tar 设计模型 管理器 不同 申请 认证 img security
权限管理一直是后台系统中一个比较重要的东西,因为一般会涉及到安全方面的问题。之前在公司老的授权系统上做了一个模块的改造,算是体验了一下授权系统是怎么回事,但自己经验不够,也没去了解基本模型,所以出去面试也被怼了,这里补一下权限系统的基本模型,然后了解一下业界的常用权限框架。
RBAC是最为普及的权限设计模型,全称是Role-Based Access Control。这里介绍的是最核心的模型,RBAC0,那么这个模型分为哪几个部分呢?
上面就是RBAC0的模型图了,他们之间都是多对多的关系,这个好理解。接下来阐述一下这其中的三个部分。
用户
用户就是操作的主体,可以这个系统的管理员,也可以使C端用户,也可以内部员工,即可以简单分为2B和2C用户。
角色
角色其实也好理解,比如一个系统有管理员和普通用户两种角色,管理员和普通用户自然有着不同的权限。它是权限和用户之间的桥梁,可以避免直接对用户进行赋权操作,而是对用户赋予某个角色,那么这个用户就有了这个角色下的所有权限,这样方便之后拓展并且提交效率。每一个角色可以关联多个权限,而一个用户可以关联多个角色,所以这样一个用户就有了多个角色的多个权限。
权限
权限就是用户可以访问的资源,具体可以分为页面权限,操作权限和数据权限。
前面一般称之为RBAC0模型,RBAC1是在这个基础上扩展来的,增加了角色的继承概念,也就是角色这这里具有了上下级的关系,谈到继承,那么自然就有继承关系的区分,RBAC1角色的继承关系分为一般继承关系和受限继承关系,一般继承管理允许角色之间多继承,而受限继承关系进一步要求角色继承关系必须是一个树形结构。有了继承,那么比如A继承了B,那么A就自动有了B的权限,所以赋予给用户的时候,就不需要再两个都赋予一遍了。
RBAC2在用户与角色之间和角色与角色之间做了一些约束,规定了权限被赋予角色的时候,或者角色被赋予用户的时候,以及用户主动激活一个角色的时候,必须遵循一些强制性的规则。具体可以包括为:
互斥角色
同一个用户只能被分为到一个互斥用户集合中的至多一个角色,支持责任分离的原则。互斥角色就是权限互相制约的角色,跟概率论里的互斥差不多意思。
基数约束
一个角色被分配的用户数量受限,一个角色可以拥有的角色数目受限,一个角色对应的访问权限数目也受限。
先决条件角色
即用户想获得某上级角色,必须先获得下一级的角色。
用户组
当用户基数变大的时候,角色类型增多的时候,一般有一部分人就有了相同的属性,比如某一个部分中的所有员工,如果直接给某个用户分配角色,那么工作量会很大,那么如果把相同属性归到某一个用户组,那么直接将用户添加到某个用户组下,这个用户就有了和组里其他人一样的权限了。
权限组
权限组就是将多个权限打包,比如某一个产品的所有模块的使用权限,在赋予权限的时候,就直接按权限组来赋予。
授权就是给用户授予角色,这个过程可以分为手动授权和审批授权。
手动授权
管理员来进行操作,给用户添加角色,给角色添加用户。
审批授权
这个是用户来申请某一个职位角色,然后管理员或者对应的上级进行审批。
Apache shiro
shiro是一个开源项目,也是一个轻量级框架,Spring生态里有Spring security,但比shiro要复杂一点,这里鉴于篇幅,Spring Security我之后再重新写一个吧。
shiro包括三个重要的功能模块,分别是:
shiro的功能有很多,包括:身份认证,授权,会话管理,加密,web支持,缓存,多线程并发认证,测试支持,Run As,Remember me等。
Spring Security
这个比Shiro要复杂一点,它和SpringMVC有很好的集成,并配置了流行的安全算法实现,安全主要包括认证和验证,认证是为用户建立一个其声明的角色的过程,这个角色可以是一个用户,一个设备或者一个系统,验证指的是一个用户在应用中能够执行某个操作。
它可以分为:
两者比较
标签:member tar 设计模型 管理器 不同 申请 认证 img security
原文地址:https://www.cnblogs.com/Yintianhao/p/14909460.html