什么是数据权限?
数据权限是通过配置数据规则,在列表展示时,动态的实现不同的人展示不同的数据,权限控制在每一行。
比如:每个人只能看见自己创建的数据,就可以通过数据规则动态配置,而不需要在sql中
通过user_id = #{currentUserId} 写死。
注解介绍
@GlobalDataScope(component = "system/role/RoleList")
component填写的是前端组件值,与新增菜单时填写的组件值必须一致(如图)。
后端代码案例
@GlobalDataScope(component = "system/role/RoleList")
@RequestMapping(value = "/pageList", method = RequestMethod.GET)
public AjaxJson<IPage<SysUser>> queryPageList(SysRole role, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
QueryWrapper<SysRole> queryWrapper = QueryWrapperUtil.initQueryWrapper(role);
Page<SysRole> page = new Page<SysRole>(pageNo, pageSize);
IPage<SysRole> pageList = sysRoleService.page(page, queryWrapper);
return AjaxJson.success(pageList);
}
上面代码是基于mybatis-plus 进行数据权限过滤的,假如你想使用myabtis的xml方式编写sql,需要在xml的sql, where 中条件后面加 ${xxx.dataScope}
controller层
@GlobalDataScope(component = "system/role/RoleList")
@RequestMapping(value = "/pageList", method = RequestMethod.GET)
public AjaxJson<IPage<SysUser>> queryPageList(SysRole role, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
Page<SysRole> page = new Page<SysRole>(pageNo, pageSize);
IPage<SysRole> pageList = sysRoleService.pageList(page, role);
return AjaxJson.success(pageList);
}
mapper层
IPage<SysRole> pageList(Page<SysRole> page,@Param("role") SysRole role);
xml层
以下sql代码含动态排序和数据权限过滤
select * from sys_role sr
<where>
${role.dataScope}
</where>
ORDER BY
<choose>
<when test="role.sortField != null and role.sortField != ''">
sr.${role.sortField}
<if test="role.sortOrder != null and role.sortOrder != ''">
${role.sortOrder}
</if>
</when>
<otherwise>
sr.create_time desc
</otherwise>
</choose>
使用该注解需要配置数据权限规则并且进行数据授权才能使用。参考 数据规则配置