Skip to content

扩展模块:数据权限

简介

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 接口,并实现 isFiltergetUserContext() 方法。

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 方法,这样凡是依赖于 BaseMapperselectList 方法,例如:selectOneselectPage,都会被数据权限插件拦截并添加数据权限处理。

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-extensionMyBatis Plus 扩展包
top.continew:continew-starter-extension-datapermission-core
top.continew:continew-starter-core

参考资料

1.数据权限插件:https://baomidou.com/plugins/data-permission/