扩展模块:数据权限
简介
continew-starter-extension-datapermission-mp
是 ContiNew Starter 基于 MyBatis Plus 针对通用数据权限处理封装的扩展模块。
主要特性
- 版本锁定:涉及依赖已进行版本锁定,使用时无需配置版本
- 已提供默认数据权限处理,支持 5 种数据范围:全部数据权限、本部门及以下数据权限、本部门数据权限、仅本人数据权限、自定义数据权限
使用步骤
引入依赖
xml
<dependency>
<groupId>top.continew</groupId>
<artifactId>continew-starter-extension-datapermission-mp</artifactId>
</dependency>
指定配置
配置详情请查看:top.continew.starter.extension.datapermission.autoconfigure.DataPermissionProperties
。
yaml
--- ### 数据权限配置
continew-starter:
data-permission:
# 是否启用(默认:已启用)
enabled: true
实现 DataPermissionUserContextProvider 接口
编写一个实现类,实现 DataPermissionUserContextProvider
接口,并实现 isFilter
和 getUserContext()
方法。
java
public class DefaultDataPermissionUserContextProvider implements DataPermissionUserContextProvider {
@Override
public boolean isFilter() {
return !UserContextHolder.isAdmin();
}
@Override
public UserContext getUserContext() {
top.continew.admin.common.context.UserContext context = UserContextHolder.getContext();
UserContext userContext = new UserContext();
userContext.setUserId(Convert.toStr(context.getId()));
userContext.setDeptId(Convert.toStr(context.getDeptId()));
userContext.setRoles(context.getRoles()
.stream()
.map(r -> new RoleContext(Convert.toStr(r.getId()), DataScope.valueOf(r.getDataScope().name())))
.collect(Collectors.toSet()));
return userContext;
}
}
在 Spring 容器中提供 DataPermissionUserContextProvider
Bean 即可。
java
@Configuration
public class MybatisPlusConfiguration {
/**
* 数据权限用户上下文提供者
*/
@Bean
public DataPermissionUserContextProvider dataPermissionUserContextProvider() {
return new DefaultDataPermissionUserContextProvider();
}
}
使用注解
配置好数据权限后,可以通过注解 @DataPermission
来灵活的为指定 Mapper 接口方法添加数据权限处理。
为了方便使用,你可以继承 BaseMapper
并使用 @DataPermission
注解来覆盖默认的 selectList
方法,这样凡是依赖于 BaseMapper
的 selectList
方法,例如:selectOne
,selectPage
,都会被数据权限插件拦截并添加数据权限处理。
java
public interface DataPermissionMapper<T> extends BaseMapper<T> {
@Override
@DataPermission
List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
@Override
@DataPermission
List<T> selectList(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
}
温馨提示
如果你不想使用 Starter 提供的默认数据权限处理器实现,但仍想基于 MyBatis Plus 提供的数据权限插件来实现数据权限,可自行重写 com.baomidou.mybatisplus.extension.plugins.handler.DataPermissionHandler
,并将 Bean 注入到 Spring 容器即可,Starter 组件会自动识别加载数据权限插件。
核心依赖
依赖 | 描述 |
---|---|
com.baomidou:mybatis-plus-extension | MyBatis Plus 扩展包 |
top.continew:continew-starter-extension-datapermission-core | |
top.continew:continew-starter-core |