数据权限
在实际开发中,需要设置用户只能查看哪些部门的数据,这种情况一般称为数据权限。 例如对于销售,财务的数据,它们是非常敏感的,因此要求对数据权限进行控制, 对于基于集团性的应用系统而言,就更多需要控制好各自公司的数据了。如设置只能看本公司、或者本部门的数据,对于特殊的领导,可能需要跨部门的数据, 因此程序不能硬编码那个领导该访问哪些数据,需要进行后台的权限和数据权限的控制。
实现原理
本功能通过Mybatis-Plus自定义插件实现在SQL文中动态追加组织机构或用户的查询条件,从而获取满足用户数据权限的数据。
- 用户登陆时把数据权限存储到Redis中。
- 用户发起请求时,数据权限上下文过滤器从Redis中获取该用户的数据权限存储到数据权限上下文中。
- 查询DB时,根据数据权限上下文拼接SQL文。
- 获取满足用户数据权限的数据。
数据权限使用
启用数据权限
- 参数值:失效(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);
}
}