如何设计一个通用的权限管理系统
来自:掘金,作者:PioneerYi
链接:https://juejin.cn/post/6850037267554287629
一、CAS身份认证
1.1、名词概念
1.1.1、CAS的Ticket
1.1.2、CAS的服务
KDC(Key Distribution Center );
AS(Authentication Service)它索取 Crendential,发放 TGT;
TGS(Ticket Granting Service),索取 TGT ,发放 ST。
1.1.3、CAS的媒介
1.2、CAS工作原理
二、基于角色的权限管理模型
2.1、基本的RBAC模型
2.2、引入用户组的RBAC模型
2.3、角色分级的RBAC模型
2.4、角色限制的RBAC模型
2.5、权限管理的基本元素
是否关系
继承关系
限制关系(互斥、范围限制、边界限制、字段限制)
三、数据表设计
1、产品表(t_product_info)
2、产品成员表(t_product_member)
3、用户信息表(t_user_info)
4、用户角色表(t_user_role)
5、角色表(t_role)
6、基础角色表(t_role_base)
7、角色权限表(t_role_permission)
8、用户组表(t_user_group,可选)
9、组角色表(t_user_group_role,可选)
10、用户权限表(t_user_permission,可选)
四、角色及权限点设计
4.1、定义系统中的用户角色
4.2、定义系统中的资源以及操作
4.3、权限体策略
资源:操作:实例:BU:密级
五、身份认证加权限管理实施
5.1、身份认证
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token){}
public class MyRealm1 implements AuthenticatingRealm {
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
String username = (String)token.getPrincipal(); //得到用户名
String password = new String((char[])token.getCredentials()); //得到密码
//取数据库中看用户名是否有效
//checkUserInfo();
//如果身份认证验证成功,返回一个AuthenticationInfo实现;
return new SimpleAuthenticationInfo(username, password, getName());
}
}
5.2、权限校验
//获取用户身份信息,Authorization前需要先获取用户身份信息
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token){}
//获取用户权限信息
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection){
}
六、参考资料
https://shiro.apache.org/ https://github.com/apache/shiro https://jinnianshilongnian.iteye.com/blog/2018398 https://my.oschina.net/bochs/blog/2248956 https://blog.itning.top/posts/Essays/20190408-A-brief-explanation-of-single-sign-on-SSO-and-centralized-authentication-service-CAS-and-open-authorized-OAuth.html
逆锋起笔
是一个专注于程序员圈子的技术平台,你可以收获最新技术动态
、最新内测资格
、BAT等大厂的经验
、精品学习资料
、职业路线
、副业思维
,微信搜索逆锋起笔
关注!
评论