数据权限
在现代企业应用系统中,数据权限管理是确保数据安全与合规访问的核心功能之一。它允许系统管理员根据用户的角色、部门、职位等因素灵活配置数据访问权限,从而实现对敏感信息的有效保护和精细化管理。
场景:销售经理仅能查看和编辑自己及其下属团队的销售记录。
实现:为“销售经理”角色配置“查看/编辑”权限,并设定数据范围为“本部门及以下数据权限”。当销售经理登录系统查询销售数据时,系统自动过滤,只展示符合权限的数据。
数据权限,简而言之,就是限制用户能够查看或操作的数据范围。这包括但不限于查看特定记录、编辑某些字段或执行特定操作的能力。在本项目中,目前已实现了行级数据权限,通过为每个角色选择数据权限范围,实现细粒度的数据权限控制。
角色与权限分配
管理员登录系统后,导航至“系统管理”->“角色管理”,点击“新增角色”,输入角色名称(如“销售经理”)及描述,选择好数据权限范围(如“本部门及以下数据权限”),保存即可创建新角色。
创建好角色之后,可以通过用户管理将角色分配给用户,如果开放了注册功能,也可以将指定角色设为新用户默认值。
数据权限控制
数据权限控制通过拦截 SQL 语句实现,在查询数据时,系统会自动根据当前登录用户的数据权限过滤结果集,确保用户只能看到其有权访问的信息。
配置数据权限插件
实现 top.continew.starter.data.mybatis.plus.datapermission.DataPermissionFilter
接口,重写它的两个方法,并注入到 Spring 容器。
本项目中已经处理好了本部分内容。
public interface DataPermissionFilter {
/**
* 是否过滤
*
* @return true:过滤;false:不过滤
*/
boolean isFilter();
/**
* 获取当前用户信息
*
* @return 当前用户信息
*/
DataPermissionCurrentUser getCurrentUser();
}
使用注解
通过在 Mapper 接口方法上添加 @DataPermission
注解,指定数据过滤的关键信息。
本项目中已经提供了 DataPermissionMapper
来方便快速实现通用数据权限控制。
public interface DataPermissionMapper<T> extends BaseMapper<T> {
/**
* 根据 entity 条件,查询全部记录
*
* @param queryWrapper 实体对象封装操作类(可以为 null)
* @return 全部记录
*/
@Override
@DataPermission
List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
/**
* 根据 entity 条件,查询全部记录(并翻页)
*
* @param page 分页查询条件
* @param queryWrapper 实体对象封装操作类(可以为 null)
* @return 全部记录(并翻页)
*/
@Override
@DataPermission
List<T> selectList(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
}
如果它不能满足你的需要,可以根据你的实际情况,在对应 Mapper 接口方法上配置 @DataPermission
注解信息。
字段 | 描述 | 默认值 |
---|---|---|
value | 表别名(等价于 tableAlias) | |
tableAlias | 表别名 | |
id | ID | id |
deptId | 部门 ID | dept_id |
userId | 用户 ID(仅本人数据权限,必须确认配置此信息) | create_user |
roleId | 角色 ID(角色和部门关联表) | role_id |
deptTableAlias | 部门表别名 | sys_dept |
roleDeptTableAlias | 角色和部门关联表别名 | sys_role_dept |