主题
数据权限
数据权限组件包含数据权限管理及配置、数据权限拦截器两部分。通过数据权限管理及配置,可以为用户针对不同的菜单资源授予指定的数据权限范围。数据权限拦截器根据用户的数据权限,对请求的数据资源自动插入过滤sql,实现数据权限的控制。
使用说明
依赖引入
在不同的环境下引入以下依赖
xml
<!-- 单体下 -->
<dependency>
<groupId>cn.zjtele.pubinfo.sys.rbac</groupId>
<artifactId>rbac-api</artifactId>
<version>${sys-rbac.version}</version>
</dependency>
<!-- 分布式下 -->
<dependency>
<groupId>cn.zjtele.pubinfo.sys.rbac</groupId>
<artifactId>rbac-extension</artifactId>
<version>${sys-rbac.version}</version>
</dependency>
配置参数
yaml
pubinfo:
data-permission:
enable: true
enable-strict: false
pubinfo.data-permission.enable
该配置表示是否开启数据权限控制,缺省后默认为truepubinfo.data-permission.enable-strict
该配置表示是否开启严格模式,缺省后默认false
代码使用
在使用时需要申明进行数据权限拦截的方法以及拦截的具体字段,下面对使用的注解进行说明
@DataPermission注解
该注解的在dao层的mapper上使用,申明该mapper开启数据权限控制;
- 注解参数
includeMethods
是一个字符串数组。值代表需要进行数据拦截的方法名称 - 注解参数
defaultMenuCode
,代表如果前端不传资源编码是,该mapper默认执行的资源编码code。
@DataPermissionField注解
该注解的在dao层的方法以及dao层返回对象上使用
- 注解参数
userIdField
是一个字符串。值代表需要进行用户id过滤的字段(需要带别名) - 注解参数
orgIdField
是一个字符串。值代表需要进行组织id过滤的字段(需要带别名)
数据权限配置
查询当前数据访问,用户所具备的数据权限范围规则为如下:
- 根据前端传入的资源编码(
header传入
),获取用户针对该资源的数据权限范围,并进行合并。 - 如果当前资源用户未配置数据权限,则采用菜单资源配置的默认数据权限规则。
- 如果该菜单资源未开启数据权限控制,则默认返回全部数据。
资源配置
资源(菜单、按钮、非菜单也)新增、编辑时,可以配置该菜单的默认数据权限,具体如下图:
数据权限管理
数据权限管理是为指定资源菜单配置对应的数据权限规则。相当于数据权限角色,该数据权限可以授予用户。
用户授权
为用户授予数据权限。
插件原理
技术原理
本插件基于mybatis的拦截器,通过拦截Executor
后对@DataPermissionField
注解中申明的两个字段值进行and in
条件的拼接。例如 @DataPermissionField(userIdField = "user.user_id", orgIdField = "org.id")
在拦截后生成的sql为select * from user left join org on user.org_id = org.id where 业务条件 and user_id in ('','') and org.id in ('')
业务原理
数据权限模块有一系列的规则,例如:查看全部
,仅看自己
,仅看所在部门
,仅看所在部门及子部门
,仅自选部门
,自选部门及子部门
,指定群组
等规则。但是这些规则细化到最底层就是对应数据的user_id
和org_id
两个字段。所以我们给用户授权了建立的数据权限,就相当于用户在查询对应数据时就有了两个in
查询的范围。
严格模式说明
严格模式会校验请求头X-ResourceMark
传输的值(实际为资源表的code
),通过这个code值查询出对应的资源,然后来判断资源中的permission_code
是否包含当前请求的path。如果不包含则校验不通过
高级使用
多个数据权限的合并自定义
用户调用接口时,改用户对该接口可能拥有多个数据权限的规则,那么这个时候就需要对数据权限的规则进行合并。本系统中的默认合并实现方式是将多个数据权限规则对应的用户id集合做并集操作、组织id集合做并集操作。 如果该合并方式不满足业务需求,可实现PubDataPermissionRuleMergeStrategy
接口来自定义合并规则。