作者:PioneerYi链接:https://juejin.|如何设计一个通用的权限管理系统?说的太详细了!( 四 )
4.1、定义系统中的用户角色
一般是采用“通用角色+实例角色”的模式 , 实例角色可继承通用角色 , 从而拥有通用角色的权限 。
常见的通用角色定义:ADMIN、MANAGER、MEMBER、GUEST常见角色权限分配:1)SUPER_ADMIN,具有系统一切权限1)产品ADMIN , 具有当前产品所有权限;2)产品MANAGER , 不具备删除权限 , 可修改 , 添加成员等3)产品MEMEBER,可查看 , 修改信息 , 不可添加成员;4)产品GUEST,只可查看
实例角色:实例角色一般可以这样定义:“资源点+通用角色+资源ID”
注:其中资源可能是产品 , 可能是页面 , 也可能是菜单等
4.2、定义系统中的资源以及操作
一般系统中的最常见资源就是:产品(P)一般对资源的主要操作包括:增加(CREATE)、删除(DELETE)、修改(EDIT)、查看(VIEW)
当然 , 系统中的资源肯定不止产品 , 同时产品这个粒度有些太粗 , 还可以更细化控制 , 当然一切都根据实际业务需求情况定义相应的资源点和操作 。
4.3、权限体策略
权限控制策略采用五元组 , 如下:
其中 , 资源可以是人 , 也可以是一个需求 , 一个文件等等;操作为对资源的操作;实例极为产品ID或者用户ID;BU , 密级用于控制不同BU,不同保密模块的可见性
五、身份认证加权限管理实施
JAVA可以采用SHIRO框架 , 一个最简单的一个Shiro应用:1)应用代码通过subject授权 , 而subject又委托给SecurityManager;2)我们需要给Shiro的security注入Realm , 从而让SecurityManager能得到合法的用户及其权限进行判断;
Shiro的最主要要做的工作其实就是两个:身份认证和权限校验 , 下面分别进行介绍 。
5.1、身份认证
通过前面的文章分析 , 我们知道自定义身份校验校验逻辑 , 只需要继承AuthenticatingRealm即可 , Override如下接口进行身份认证:
上面这个接口 , 参数AuthenticationToken , 它可以自定义子类实现 , 框架提供的有:UsernamePasswordToken , CasToken 。
如果是采用用户名密码方式登陆 , 那么就构造一个UsernamePasswordToken , 然后取数据查询用户名密码是否有效;如果是采用的CAS方式登陆 , 那么就通过ticket构造一个CasToken , 然后与CAS服务交互验证ticket是否有效 。 如果验证通过会生成一个AuthenticationInfo 。 此时身份认证完成 。
最简单的用户密码登陆身份校验代码CAS方式验证首先得有CAS系统 , 这里就不说明CAS方式怎么验证了 , 说一下怎么用用户密码登陆进行身份校验 , 认证流程都一样
自定义一个AuthenticatingRealm:
5.2、权限校验
权限校验主要要做的事情就是完成"从数据库中查出用户所拥有的所有权限是否包含当前待校验的权限"这么一个判断过程 , 因此主要要做的就是:1)从数据库中查出用户所拥有的所有权限;2)解析权限 , 看看是否包含待校验的权限 。
1、第一步:获取用户权限信息获取用户权限信息这个过程是在Realm中完成的 , 继承AuthorizingRealm , 然后Override如下两个接口获取用户的权限信息:
权限信息查询过程一般为:1)从数据库中读区用户自身所配权限;2)从数据库中读取用户角色所用拥有的权限(角色包含实例角色和BASE角色)3)用户最终的权限:用户自身权限+用户角色权限
2、第二步:权限校验
1)如果通过角色校验 , 则调用hasRole , 与传入的角色比较即可;
2)如果通过权限体校验 , 则调用isPermitted(...),与传入的权限进行比较即可 。
shiro内部逻辑如下:首先通过PermissionResolver将权限字符串转换成相应的Permission实例 , 默认使用WildcardPermissionResolver , 即转换为通配符的WildcardPermission;接着调用Permission.implies(Permissionp)逐个与传入的权限比较 , 如果有匹配的则返回true , 否则false 。
- 世界海员日丨链接世界的旅程
- 涨价的乐高,还能火多久?
- 20220624 05:01:00 作者:老王在亚马逊的:会议上|亲情or恐怖:Alexa可以模仿故去亲人声音
- Java|腾讯没闲着
- iPhone|618黑科技轻薄本推荐,职场人、创作者必看
- 36氪|36氪独家 | 「凌迪科技Style3D」获得近1亿美元PreB+融资,想以柔性仿真引擎链接元宇宙
- 亚马逊|诊断上百个链接后,发现亚马逊中小卖家7大普遍问题
- 小红书处置多家 MCN 和部分作者,打击买卖账号及刷量作弊行为
- |生产力工具只认准MBP?华硕ProArt 创16靠这几招为创作者强势赋能
- 数字金融发展要与数字金融立法同步
