数据权限

在实际开发中,需要设置用户只能查看哪些部门的数据,这种情况一般称为数据权限。 例如对于销售,财务的数据,它们是非常敏感的,因此要求对数据权限进行控制, 对于基于集团性的应用系统而言,就更多需要控制好各自公司的数据了。如设置只能看本公司、或者本部门的数据,对于特殊的领导,可能需要跨部门的数据, 因此程序不能硬编码那个领导该访问哪些数据,需要进行后台的权限和数据权限的控制。

实现原理

本功能通过Mybatis-Plus自定义插件实现在SQL文中动态追加组织机构或用户的查询条件,从而获取满足用户数据权限的数据。

  1. 用户登陆时把数据权限存储到Redis中。
  2. 用户发起请求时,数据权限上下文过滤器从Redis中获取该用户的数据权限存储到数据权限上下文中。
  3. 查询DB时,根据数据权限上下文拼接SQL文。
  4. 获取满足用户数据权限的数据。
数据权限使用
启用数据权限

  • 参数值:失效(0)、生效(1)
配置数据权限范围

  • 表名集合:需要查询的业务表名,业务表中必须要包含组织机构字段和用户字段
配置数据权限管理

  • 数据权限类型说明:
  • 全权限:查看所有数据
  • 本人组织及以下:只能查看本人组织及本人组织以下的数据
  • 本人组织:只能查看本人组织的数据
  • 本人:只能查看本人的数据
  • 自定义:只能查看权限设置绑定组织的数据

※本人权限为最低权限,如果有其他限权,本人权限不生效

代码配置数据权限

在pom.xml中添加依赖:

<dependency>
    <groupId>com.sofast.cloud</groupId>
    <artifactId>so-fast-data-permission-web</artifactId>
</dependency>

并在配置文件中进行配置:

#数据权限配置
sofast:
  data:
    permission:
      column:
        #组织机构字段名
        organization: organization_id
        #用户字段名
        user: create_user
扩展使用

如需要更加灵活的数据权限可在控制层使用@DataPermission注解,从而满足业务需求。

自定义组织
@DataPermission(clazz = CmsDataPermissionCustomOrgServiceImpl.class)

CmsDataPermissionCustomOrgServiceImpl需要实现IDataPermissionCustomOrgService接口

@Service
public class CmsDataPermissionCustomOrgServiceImpl implements IDataPermissionCustomOrgService {

    @Override
    public List<Long> getOrgList() {
        // TODO 自己的业务
        return ListUtil.toList(103L, 104L, 105L);
    }
}
自定义用户
@DataPermission(clazz = CmsDataPermissionCustomUserServiceImpl.class)

CmsDataPermissionCustomUserServiceImpl需要实现IDataPermissionCustomUserService接口

@Service
public class CmsDataPermissionCustomUserServiceImpl implements IDataPermissionCustomUserService {

    @Override
    public List<Long> getUserList() {
        // TODO 自己的业务
        return ListUtil.toList(3L, 4L, 5L);
    }
}
Copyright © 2022. 恩梯梯数据(中国)信息技术有限公司. all right reserved,powered by Gitbook该文件修订时间: 2022-01-10 09:15:20

results matching ""

    No results matching ""