什么是数据权限?
    数据权限是通过配置数据规则,在列表展示时,动态的实现不同的人展示不同的数据,权限控制在每一行。
    比如:每个人只能看见自己创建的数据,就可以通过数据规则动态配置,而不需要在sql中
    通过user_id = #{currentUserId} 写死。

    注解介绍

    1. @GlobalDataScope(component = "system/role/RoleList")

    component填写的是前端组件值,与新增菜单时填写的组件值必须一致(如图)。
    微信图片_20211016160136.png

    后端代码案例

        @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>
    

    使用该注解需要配置数据权限规则并且进行数据授权才能使用。参考 数据规则配置