一、RABC模型
1、主要概念:
用户(User):实际使用系统的人员。每个用户可以拥有一个或多个角色。
角色(Role):权限的集合,代表用户在系统中的职位或职能。角色是根据组织的需要定义的。
权限(Permission):对系统资源的访问权。权限可以是读取、写入、修改或删除某些资源。
会话(Session):用户在系统中的一次登录实例。用户可以在会话中激活一个或多个角色。
2、基本模型:
基本关系组成:
1. 用户-角色分配(User-Role Assignment, UA):定义哪些用户被分配到哪些角色。
2. 角色-权限分配(Role-Permission Assignment, PA):定义哪些角色拥有哪些权限。
3. 用户-会话分配(User-Session Assignment, US):定义用户和会话之间的关系。
4. 角色-会话分配(Role-Session Assignment, RS):定义会话中可以激活哪些角色。
3、涉及表
sys_menu 菜单权限表
sys_role 角色信息表
sys_role_menu 角色和菜单关联表
sys_user 用户信息表
sys_user_role 用户和角色关联表
4、表之间的关系
二、若依权限设置
1、若依对基础RDBC模型表新增了四张表:
sys_dept 部门表
sys_post 岗(职)位信息表
sys_role_dept 角色和部门关联表
sys_user_post 用户与岗位关联表
2、九张表关系
3、权限UI操作:
①创建菜单
②创建角色,并分配权限
③创建用户,并关联角色
4、注解做权限检查
@PreAuthorize 注解 是spring security框架中用来做权限检查的
运行方法前验证权限,权限够就放行,不够就拦截
流程如下:
5、数据权限
- 数据范围过滤,在mapper/system/SysUserMapper.xml中selectUserList的sql后拼接了${params.dataScope}
- 防止 $ 符号的sql注入,在clearDataScope方法中做了处理
- SysUser extends BaseEntity ,在BaseEntity中有个名为params的 Map<String, Object>;
- params会在framework/aspectj/DataScopeAspect.java中的dataScopeFilter方法进行数据范围过滤
- dataScope(数据范围):1=所有数据权限,2=自定义数据权限,3=本部门数据权限,4=本部门及以下数据权限,5=仅本人数据权限
- @DataScope(deptAlias = "d", userAlias = "u") 注解中deptAlias和userAlias为部门别名和用户别名,sql拼接时用
分配数据权限UI界面:
6、按钮权限
菜单表内的perms字段,如:system:user:edit 进行判断