Commit 8278b65777d8249c0c1d29987f91dd39928dcf39
1 parent
986cb724
重构 Dept 数据权限逻辑,统一收到 yudao-spring-boot-starter-data-permission 包下
Showing
16 changed files
with
196 additions
and
124 deletions
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/datapermission/core/service/impl/DeptDataPermissionServiceImpl.java deleted
| 1 | -package cn.iocoder.yudao.adminserver.framework.datapermission.core.service.impl; | |
| 2 | - | |
| 3 | -import cn.hutool.core.collection.CollUtil; | |
| 4 | -import cn.iocoder.yudao.adminserver.framework.datapermission.core.service.DeptDataPermissionService; | |
| 5 | -import cn.iocoder.yudao.adminserver.framework.datapermission.core.service.dto.DeptDataPermissionRespDTO; | |
| 6 | -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; | |
| 7 | -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleDO; | |
| 8 | -import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; | |
| 9 | -import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysRoleService; | |
| 10 | -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | |
| 11 | -import cn.iocoder.yudao.framework.common.util.json.JsonUtils; | |
| 12 | -import cn.iocoder.yudao.framework.security.core.LoginUser; | |
| 13 | -import cn.iocoder.yudao.framework.security.core.enums.DataScopeEnum; | |
| 14 | -import lombok.RequiredArgsConstructor; | |
| 15 | -import lombok.extern.slf4j.Slf4j; | |
| 16 | - | |
| 17 | -import java.util.List; | |
| 18 | -import java.util.Objects; | |
| 19 | - | |
| 20 | -/** | |
| 21 | - * 基于部门的数据权限 Service 实现类 | |
| 22 | - * | |
| 23 | - * @author 芋道源码 | |
| 24 | - */ | |
| 25 | -@RequiredArgsConstructor | |
| 26 | -@Slf4j | |
| 27 | -public class DeptDataPermissionServiceImpl implements DeptDataPermissionService { | |
| 28 | - | |
| 29 | - /** | |
| 30 | - * LoginUser 的 Context 缓存 Key | |
| 31 | - */ | |
| 32 | - private static final String CONTEXT_KEY = DeptDataPermissionServiceImpl.class.getSimpleName(); | |
| 33 | - | |
| 34 | - private final SysRoleService roleService; | |
| 35 | - private final SysDeptService deptService; | |
| 36 | - | |
| 37 | - @Override | |
| 38 | - public DeptDataPermissionRespDTO getDeptDataPermission(LoginUser loginUser) { | |
| 39 | - // 判断是否 context 已经缓存 | |
| 40 | - DeptDataPermissionRespDTO result = loginUser.getContext(CONTEXT_KEY, DeptDataPermissionRespDTO.class); | |
| 41 | - if (result != null) { | |
| 42 | - return result; | |
| 43 | - } | |
| 44 | - | |
| 45 | - // 创建 DeptDataPermissionRespDTO 对象 | |
| 46 | - result = new DeptDataPermissionRespDTO(); | |
| 47 | - List<SysRoleDO> roles = roleService.getRolesFromCache(loginUser.getRoleIds()); | |
| 48 | - for (SysRoleDO role : roles) { | |
| 49 | - // 为空时,跳过 | |
| 50 | - if (role.getDataScope() == null) { | |
| 51 | - continue; | |
| 52 | - } | |
| 53 | - // 情况一,ALL | |
| 54 | - if (Objects.equals(role.getDataScope(), DataScopeEnum.ALL.getScope())) { | |
| 55 | - result.setAll(true); | |
| 56 | - continue; | |
| 57 | - } | |
| 58 | - // 情况二,DEPT_CUSTOM | |
| 59 | - if (Objects.equals(role.getDataScope(), DataScopeEnum.DEPT_CUSTOM.getScope())) { | |
| 60 | - CollUtil.addAll(result.getDeptIds(), role.getDataScopeDeptIds()); | |
| 61 | - continue; | |
| 62 | - } | |
| 63 | - // 情况三,DEPT_ONLY | |
| 64 | - if (Objects.equals(role.getDataScope(), DataScopeEnum.DEPT_ONLY.getScope())) { | |
| 65 | - CollectionUtils.addIfNotNull(result.getDeptIds(), loginUser.getDeptId()); | |
| 66 | - continue; | |
| 67 | - } | |
| 68 | - // 情况四,DEPT_DEPT_AND_CHILD | |
| 69 | - if (Objects.equals(role.getDataScope(), DataScopeEnum.DEPT_AND_CHILD.getScope())) { | |
| 70 | - List<SysDeptDO> depts = deptService.getDeptsByParentIdFromCache(loginUser.getDeptId(), true); | |
| 71 | - CollUtil.addAll(result.getDeptIds(), CollectionUtils.convertList(depts, SysDeptDO::getId)); | |
| 72 | - continue; | |
| 73 | - } | |
| 74 | - // 情况五,SELF | |
| 75 | - if (Objects.equals(role.getDataScope(), DataScopeEnum.SELF.getScope())) { | |
| 76 | - result.setSelf(true); | |
| 77 | - continue; | |
| 78 | - } | |
| 79 | - // 未知情况,error log 即可 | |
| 80 | - log.error("[getDeptDataPermission][LoginUser({}) role({}) 无法处理]", loginUser.getId(), JsonUtils.toJsonString(result)); | |
| 81 | - } | |
| 82 | - | |
| 83 | - // 添加到缓存,并返回 | |
| 84 | - loginUser.setContext(CONTEXT_KEY, result); | |
| 85 | - return null; | |
| 86 | - } | |
| 87 | - | |
| 88 | -} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserController.http
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/datapermission/config/SysDataPermissionConfiguration.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.system.framework.datapermission.config; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; | |
| 4 | +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; | |
| 5 | +import cn.iocoder.yudao.framework.datapermission.core.dept.rule.DeptDataPermissionRuleCustomizer; | |
| 6 | +import org.springframework.context.annotation.Bean; | |
| 7 | +import org.springframework.context.annotation.Configuration; | |
| 8 | + | |
| 9 | +/** | |
| 10 | + * system 模块的数据权限 Configuration | |
| 11 | + * | |
| 12 | + * @author 芋道源码 | |
| 13 | + */ | |
| 14 | +@Configuration | |
| 15 | +public class SysDataPermissionConfiguration { | |
| 16 | + | |
| 17 | + @Bean | |
| 18 | + public DeptDataPermissionRuleCustomizer sysDeptDataPermissionRuleCustomizer() { | |
| 19 | + return rule -> { | |
| 20 | + rule.addDeptColumn(SysUserDO.class); | |
| 21 | + rule.addDeptColumn(SysDeptDO.class, "id"); | |
| 22 | + }; | |
| 23 | + } | |
| 24 | + | |
| 25 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/framework/datapermission/package-info.java
0 → 100644
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysPermissionService.java
| 1 | 1 | package cn.iocoder.yudao.adminserver.modules.system.service.permission; |
| 2 | 2 | |
| 3 | +import cn.iocoder.yudao.framework.datapermission.core.dept.service.DeptDataPermissionFrameworkService; | |
| 3 | 4 | import cn.iocoder.yudao.framework.security.core.service.SecurityPermissionFrameworkService; |
| 4 | 5 | import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysMenuDO; |
| 5 | 6 | import org.springframework.lang.Nullable; |
| ... | ... | @@ -15,7 +16,7 @@ import java.util.Set; |
| 15 | 16 | * |
| 16 | 17 | * @author 芋道源码 |
| 17 | 18 | */ |
| 18 | -public interface SysPermissionService extends SecurityPermissionFrameworkService { | |
| 19 | +public interface SysPermissionService extends SecurityPermissionFrameworkService, DeptDataPermissionFrameworkService { | |
| 19 | 20 | |
| 20 | 21 | /** |
| 21 | 22 | * 初始化权限的本地缓存 | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/impl/SysPermissionServiceImpl.java
| ... | ... | @@ -3,19 +3,25 @@ package cn.iocoder.yudao.adminserver.modules.system.service.permission.impl; |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | 4 | import cn.hutool.core.collection.CollectionUtil; |
| 5 | 5 | import cn.hutool.core.util.ArrayUtil; |
| 6 | -import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | |
| 7 | -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.permission.SysRoleMenuMapper; | |
| 8 | -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.permission.SysUserRoleMapper; | |
| 6 | +import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; | |
| 9 | 7 | import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysMenuDO; |
| 10 | 8 | import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleDO; |
| 11 | 9 | import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleMenuDO; |
| 12 | 10 | import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysUserRoleDO; |
| 11 | +import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.permission.SysRoleMenuMapper; | |
| 12 | +import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.permission.SysUserRoleMapper; | |
| 13 | 13 | import cn.iocoder.yudao.adminserver.modules.system.mq.producer.permission.SysPermissionProducer; |
| 14 | +import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; | |
| 14 | 15 | import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysMenuService; |
| 15 | 16 | import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService; |
| 16 | 17 | import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysRoleService; |
| 17 | 18 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| 18 | 19 | import cn.iocoder.yudao.framework.common.util.collection.MapUtils; |
| 20 | +import cn.iocoder.yudao.framework.common.util.json.JsonUtils; | |
| 21 | +import cn.iocoder.yudao.framework.datapermission.core.dept.service.dto.DeptDataPermissionRespDTO; | |
| 22 | +import cn.iocoder.yudao.framework.security.core.LoginUser; | |
| 23 | +import cn.iocoder.yudao.framework.security.core.enums.DataScopeEnum; | |
| 24 | +import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | |
| 19 | 25 | import com.google.common.collect.ImmutableMultimap; |
| 20 | 26 | import com.google.common.collect.Multimap; |
| 21 | 27 | import com.google.common.collect.Sets; |
| ... | ... | @@ -40,6 +46,11 @@ import java.util.*; |
| 40 | 46 | public class SysPermissionServiceImpl implements SysPermissionService { |
| 41 | 47 | |
| 42 | 48 | /** |
| 49 | + * LoginUser 的 Context 缓存 Key | |
| 50 | + */ | |
| 51 | + private static final String CONTEXT_KEY = SysPermissionServiceImpl.class.getSimpleName(); | |
| 52 | + | |
| 53 | + /** | |
| 43 | 54 | * 定时执行 {@link #schedulePeriodicRefresh()} 的周期 |
| 44 | 55 | * 因为已经通过 Redis Pub/Sub 机制,所以频率不需要高 |
| 45 | 56 | */ |
| ... | ... | @@ -75,6 +86,8 @@ public class SysPermissionServiceImpl implements SysPermissionService { |
| 75 | 86 | private SysRoleService roleService; |
| 76 | 87 | @Resource |
| 77 | 88 | private SysMenuService menuService; |
| 89 | + @Resource | |
| 90 | + private SysDeptService deptService; | |
| 78 | 91 | |
| 79 | 92 | @Resource |
| 80 | 93 | private SysPermissionProducer permissionProducer; |
| ... | ... | @@ -329,4 +342,58 @@ public class SysPermissionServiceImpl implements SysPermissionService { |
| 329 | 342 | return CollUtil.containsAny(userRoles, Sets.newHashSet(roles)); |
| 330 | 343 | } |
| 331 | 344 | |
| 345 | + @Override | |
| 346 | + public DeptDataPermissionRespDTO getDeptDataPermission(LoginUser loginUser) { | |
| 347 | + // 判断是否 context 已经缓存 | |
| 348 | + DeptDataPermissionRespDTO result = loginUser.getContext(CONTEXT_KEY, DeptDataPermissionRespDTO.class); | |
| 349 | + if (result != null) { | |
| 350 | + return result; | |
| 351 | + } | |
| 352 | + | |
| 353 | + // 创建 DeptDataPermissionRespDTO 对象 | |
| 354 | + result = new DeptDataPermissionRespDTO(); | |
| 355 | + List<SysRoleDO> roles = roleService.getRolesFromCache(loginUser.getRoleIds()); | |
| 356 | + for (SysRoleDO role : roles) { | |
| 357 | + // 为空时,跳过 | |
| 358 | + if (role.getDataScope() == null) { | |
| 359 | + continue; | |
| 360 | + } | |
| 361 | + // 情况一,ALL | |
| 362 | + if (Objects.equals(role.getDataScope(), DataScopeEnum.ALL.getScope())) { | |
| 363 | + result.setAll(true); | |
| 364 | + continue; | |
| 365 | + } | |
| 366 | + // 情况二,DEPT_CUSTOM | |
| 367 | + if (Objects.equals(role.getDataScope(), DataScopeEnum.DEPT_CUSTOM.getScope())) { | |
| 368 | + CollUtil.addAll(result.getDeptIds(), role.getDataScopeDeptIds()); | |
| 369 | + // 自定义可见部门时,保证可以看到自己所在的部门。否则,一些场景下可能会有问题。 | |
| 370 | + // 例如说,登录时,基于 t_user 的 username 查询会可能被 dept_id 过滤掉 | |
| 371 | + CollUtil.addAll(result.getDeptIds(), loginUser.getDeptId()); | |
| 372 | + continue; | |
| 373 | + } | |
| 374 | + // 情况三,DEPT_ONLY | |
| 375 | + if (Objects.equals(role.getDataScope(), DataScopeEnum.DEPT_ONLY.getScope())) { | |
| 376 | + CollectionUtils.addIfNotNull(result.getDeptIds(), loginUser.getDeptId()); | |
| 377 | + continue; | |
| 378 | + } | |
| 379 | + // 情况四,DEPT_DEPT_AND_CHILD | |
| 380 | + if (Objects.equals(role.getDataScope(), DataScopeEnum.DEPT_AND_CHILD.getScope())) { | |
| 381 | + List<SysDeptDO> depts = deptService.getDeptsByParentIdFromCache(loginUser.getDeptId(), true); | |
| 382 | + CollUtil.addAll(result.getDeptIds(), CollectionUtils.convertList(depts, SysDeptDO::getId)); | |
| 383 | + continue; | |
| 384 | + } | |
| 385 | + // 情况五,SELF | |
| 386 | + if (Objects.equals(role.getDataScope(), DataScopeEnum.SELF.getScope())) { | |
| 387 | + result.setSelf(true); | |
| 388 | + continue; | |
| 389 | + } | |
| 390 | + // 未知情况,error log 即可 | |
| 391 | + log.error("[getDeptDataPermission][LoginUser({}) role({}) 无法处理]", loginUser.getId(), JsonUtils.toJsonString(result)); | |
| 392 | + } | |
| 393 | + | |
| 394 | + // 添加到缓存,并返回 | |
| 395 | + loginUser.setContext(CONTEXT_KEY, result); | |
| 396 | + return result; | |
| 397 | + } | |
| 398 | + | |
| 332 | 399 | } | ... | ... |
yudao-framework/yudao-spring-boot-starter-data-permission/pom.xml
| ... | ... | @@ -21,6 +21,13 @@ |
| 21 | 21 | <artifactId>yudao-common</artifactId> |
| 22 | 22 | </dependency> |
| 23 | 23 | |
| 24 | + <!-- Web 相关 --> | |
| 25 | + <dependency> | |
| 26 | + <groupId>cn.iocoder.boot</groupId> | |
| 27 | + <artifactId>yudao-spring-boot-starter-security</artifactId> | |
| 28 | + <optional>true</optional> <!-- 可选,如果使用 DeptDataPermissionRule 必须提供 --> | |
| 29 | + </dependency> | |
| 30 | + | |
| 24 | 31 | <!-- DB 相关 --> |
| 25 | 32 | <dependency> |
| 26 | 33 | <groupId>cn.iocoder.boot</groupId> | ... | ... |
yudao-framework/yudao-spring-boot-starter-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/config/DataPermissionAutoConfiguration.java renamed to yudao-framework/yudao-spring-boot-starter-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/config/YudaoDataPermissionAutoConfiguration.java
| ... | ... | @@ -18,7 +18,7 @@ import java.util.List; |
| 18 | 18 | * @author 芋道源码 |
| 19 | 19 | */ |
| 20 | 20 | @Configuration |
| 21 | -public class DataPermissionAutoConfiguration { | |
| 21 | +public class YudaoDataPermissionAutoConfiguration { | |
| 22 | 22 | |
| 23 | 23 | @Bean |
| 24 | 24 | public DataPermissionRuleFactory dataPermissionRuleFactory(List<DataPermissionRule> rules) { | ... | ... |
yudao-framework/yudao-spring-boot-starter-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/config/YudaoDeptDataPermissionAutoConfiguration.java
0 → 100644
| 1 | +package cn.iocoder.yudao.framework.datapermission.config; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.datapermission.core.dept.rule.DeptDataPermissionRule; | |
| 4 | +import cn.iocoder.yudao.framework.datapermission.core.dept.rule.DeptDataPermissionRuleCustomizer; | |
| 5 | +import cn.iocoder.yudao.framework.datapermission.core.dept.service.DeptDataPermissionFrameworkService; | |
| 6 | +import cn.iocoder.yudao.framework.security.core.LoginUser; | |
| 7 | +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; | |
| 8 | +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; | |
| 9 | +import org.springframework.context.annotation.Bean; | |
| 10 | +import org.springframework.context.annotation.Configuration; | |
| 11 | + | |
| 12 | +import java.util.List; | |
| 13 | + | |
| 14 | +/** | |
| 15 | + * 基于部门的数据权限 AutoConfiguration | |
| 16 | + * | |
| 17 | + * @author 芋道源码 | |
| 18 | + */ | |
| 19 | +@Configuration | |
| 20 | +@ConditionalOnClass(LoginUser.class) | |
| 21 | +@ConditionalOnBean(value = {DeptDataPermissionFrameworkService.class, DeptDataPermissionRuleCustomizer.class}) | |
| 22 | +public class YudaoDeptDataPermissionAutoConfiguration { | |
| 23 | + | |
| 24 | + @Bean | |
| 25 | + public DeptDataPermissionRule deptDataPermissionRule(DeptDataPermissionFrameworkService service, | |
| 26 | + List<DeptDataPermissionRuleCustomizer> customizers) { | |
| 27 | + // 创建 DeptDataPermissionRule 对象 | |
| 28 | + DeptDataPermissionRule rule = new DeptDataPermissionRule(service); | |
| 29 | + // 补全表配置 | |
| 30 | + customizers.forEach(customizer -> customizer.customize(rule)); | |
| 31 | + return rule; | |
| 32 | + } | |
| 33 | + | |
| 34 | +} | ... | ... |
yudao-framework/yudao-spring-boot-starter-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/dept/package-info.java
0 → 100644
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/datapermission/core/rule/DeptDataPermissionRule.java renamed to yudao-framework/yudao-spring-boot-starter-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/dept/rule/DeptDataPermissionRule.java
| 1 | -package cn.iocoder.yudao.adminserver.framework.datapermission.core.rule; | |
| 1 | +package cn.iocoder.yudao.framework.datapermission.core.dept.rule; | |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | 4 | import cn.hutool.core.util.StrUtil; |
| 5 | -import cn.iocoder.yudao.adminserver.framework.datapermission.core.service.DeptDataPermissionService; | |
| 6 | -import cn.iocoder.yudao.adminserver.framework.datapermission.core.service.dto.DeptDataPermissionRespDTO; | |
| 5 | +import cn.iocoder.yudao.framework.datapermission.core.dept.service.DeptDataPermissionFrameworkService; | |
| 6 | +import cn.iocoder.yudao.framework.datapermission.core.dept.service.dto.DeptDataPermissionRespDTO; | |
| 7 | 7 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| 8 | 8 | import cn.iocoder.yudao.framework.common.util.json.JsonUtils; |
| 9 | 9 | import cn.iocoder.yudao.framework.datapermission.core.rule.DataPermissionRule; |
| ... | ... | @@ -51,7 +51,7 @@ public class DeptDataPermissionRule implements DataPermissionRule { |
| 51 | 51 | private static final String DEPT_COLUMN_NAME = "dept_id"; |
| 52 | 52 | private static final String USER_COLUMN_NAME = "user_id"; |
| 53 | 53 | |
| 54 | - private final DeptDataPermissionService deptDataPermissionService; | |
| 54 | + private final DeptDataPermissionFrameworkService deptDataPermissionService; | |
| 55 | 55 | |
| 56 | 56 | /** |
| 57 | 57 | * 基于部门的表字段配置 |
| ... | ... | @@ -60,7 +60,7 @@ public class DeptDataPermissionRule implements DataPermissionRule { |
| 60 | 60 | * key:表名 |
| 61 | 61 | * value:字段名 |
| 62 | 62 | */ |
| 63 | - private final Map<String, String> DEPT_TABLE_CONFIG = new HashMap<>(); | |
| 63 | + private final Map<String, String> deptColumns = new HashMap<>(); | |
| 64 | 64 | /** |
| 65 | 65 | * 基于用户的表字段配置 |
| 66 | 66 | * 一般情况下,每个表的部门编号字段是 dept_id,通过该配置自定义。 |
| ... | ... | @@ -68,9 +68,9 @@ public class DeptDataPermissionRule implements DataPermissionRule { |
| 68 | 68 | * key:表名 |
| 69 | 69 | * value:字段名 |
| 70 | 70 | */ |
| 71 | - private final Map<String, String> USER_TABLE_CONFIG = new HashMap<>(); | |
| 71 | + private final Map<String, String> userColumns = new HashMap<>(); | |
| 72 | 72 | /** |
| 73 | - * 所有表名,是 {@link #DEPT_TABLE_CONFIG} 和 {@link #USER_TABLE_CONFIG} 的合集 | |
| 73 | + * 所有表名,是 {@link #deptColumns} 和 {@link #userColumns} 的合集 | |
| 74 | 74 | */ |
| 75 | 75 | private final Set<String> TABLE_NAMES = new HashSet<>(); |
| 76 | 76 | |
| ... | ... | @@ -126,7 +126,7 @@ public class DeptDataPermissionRule implements DataPermissionRule { |
| 126 | 126 | |
| 127 | 127 | private Expression buildDeptExpression(String tableName, Alias tableAlias, Set<Long> deptIds) { |
| 128 | 128 | // 如果不存在配置,则无需作为条件 |
| 129 | - String columnName = DEPT_TABLE_CONFIG.get(tableName); | |
| 129 | + String columnName = deptColumns.get(tableName); | |
| 130 | 130 | if (StrUtil.isEmpty(columnName)) { |
| 131 | 131 | return null; |
| 132 | 132 | } |
| ... | ... | @@ -140,7 +140,7 @@ public class DeptDataPermissionRule implements DataPermissionRule { |
| 140 | 140 | if (Boolean.FALSE.equals(self)) { |
| 141 | 141 | return null; |
| 142 | 142 | } |
| 143 | - String columnName = USER_TABLE_CONFIG.get(tableName); | |
| 143 | + String columnName = userColumns.get(tableName); | |
| 144 | 144 | if (StrUtil.isEmpty(columnName)) { |
| 145 | 145 | return null; |
| 146 | 146 | } |
| ... | ... | @@ -150,23 +150,23 @@ public class DeptDataPermissionRule implements DataPermissionRule { |
| 150 | 150 | |
| 151 | 151 | // ==================== 添加配置 ==================== |
| 152 | 152 | |
| 153 | - public void addDeptTableConfig(Class<? extends BaseDO> entityClass) { | |
| 154 | - addDeptTableConfig(entityClass, DEPT_COLUMN_NAME); | |
| 153 | + public void addDeptColumn(Class<? extends BaseDO> entityClass) { | |
| 154 | + addDeptColumn(entityClass, DEPT_COLUMN_NAME); | |
| 155 | 155 | } |
| 156 | 156 | |
| 157 | - public void addDeptTableConfig(Class<? extends BaseDO> entityClass, String columnName) { | |
| 157 | + public void addDeptColumn(Class<? extends BaseDO> entityClass, String columnName) { | |
| 158 | 158 | String tableName = TableInfoHelper.getTableInfo(entityClass).getTableName(); |
| 159 | - DEPT_TABLE_CONFIG.put(tableName, columnName); | |
| 159 | + deptColumns.put(tableName, columnName); | |
| 160 | 160 | TABLE_NAMES.add(tableName); |
| 161 | 161 | } |
| 162 | 162 | |
| 163 | - public void addUserTableConfig(Class<? extends BaseDO> entityClass) { | |
| 164 | - addUserTableConfig(entityClass, DEPT_COLUMN_NAME); | |
| 163 | + public void addUserColumn(Class<? extends BaseDO> entityClass) { | |
| 164 | + addUserColumn(entityClass, USER_COLUMN_NAME); | |
| 165 | 165 | } |
| 166 | 166 | |
| 167 | - public void addUserTableConfig(Class<? extends BaseDO> entityClass, String columnName) { | |
| 167 | + public void addUserColumn(Class<? extends BaseDO> entityClass, String columnName) { | |
| 168 | 168 | String tableName = TableInfoHelper.getTableInfo(entityClass).getTableName(); |
| 169 | - USER_TABLE_CONFIG.put(tableName, columnName); | |
| 169 | + userColumns.put(tableName, columnName); | |
| 170 | 170 | TABLE_NAMES.add(tableName); |
| 171 | 171 | } |
| 172 | 172 | ... | ... |
yudao-framework/yudao-spring-boot-starter-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/dept/rule/DeptDataPermissionRuleCustomizer.java
0 → 100644
| 1 | +package cn.iocoder.yudao.framework.datapermission.core.dept.rule; | |
| 2 | + | |
| 3 | +/** | |
| 4 | + * {@link DeptDataPermissionRule} 的自定义配置接口 | |
| 5 | + * | |
| 6 | + * @author 芋道源码 | |
| 7 | + */ | |
| 8 | +@FunctionalInterface | |
| 9 | +public interface DeptDataPermissionRuleCustomizer { | |
| 10 | + | |
| 11 | + /** | |
| 12 | + * 自定义该权限规则 | |
| 13 | + * 1. 调用 {@link DeptDataPermissionRule#addDeptColumn(Class, String)} 方法,配置基于 dept_id 的过滤规则 | |
| 14 | + * 2. 调用 {@link DeptDataPermissionRule#addUserColumn(Class, String)} 方法,配置基于 user_id 的过滤规则 | |
| 15 | + * | |
| 16 | + * @param rule 权限规则 | |
| 17 | + */ | |
| 18 | + void customize(DeptDataPermissionRule rule); | |
| 19 | + | |
| 20 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/datapermission/core/service/DeptDataPermissionService.java renamed to yudao-framework/yudao-spring-boot-starter-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/dept/service/DeptDataPermissionFrameworkService.java
| 1 | -package cn.iocoder.yudao.adminserver.framework.datapermission.core.service; | |
| 1 | +package cn.iocoder.yudao.framework.datapermission.core.dept.service; | |
| 2 | 2 | |
| 3 | -import cn.iocoder.yudao.adminserver.framework.datapermission.core.service.dto.DeptDataPermissionRespDTO; | |
| 3 | +import cn.iocoder.yudao.framework.datapermission.core.dept.service.dto.DeptDataPermissionRespDTO; | |
| 4 | 4 | import cn.iocoder.yudao.framework.security.core.LoginUser; |
| 5 | 5 | |
| 6 | 6 | /** |
| 7 | - * 基于部门的数据权限 Service 接口 | |
| 7 | + * 基于部门的数据权限 Framework Service 接口 | |
| 8 | + * 目前的实现类是 SysPermissionServiceImpl 类 | |
| 8 | 9 | * |
| 9 | 10 | * @author 芋道源码 |
| 10 | 11 | */ |
| 11 | -public interface DeptDataPermissionService { | |
| 12 | +public interface DeptDataPermissionFrameworkService { | |
| 12 | 13 | |
| 13 | 14 | /** |
| 14 | 15 | * 获得登陆用户的部门数据权限 | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/framework/datapermission/core/service/dto/DeptDataPermissionRespDTO.java renamed to yudao-framework/yudao-spring-boot-starter-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/dept/service/dto/DeptDataPermissionRespDTO.java
| 1 | -package cn.iocoder.yudao.adminserver.framework.datapermission.core.service.dto; | |
| 1 | +package cn.iocoder.yudao.framework.datapermission.core.dept.service.dto; | |
| 2 | 2 | |
| 3 | 3 | import lombok.Data; |
| 4 | 4 | |
| 5 | -import java.util.ArrayList; | |
| 6 | 5 | import java.util.HashSet; |
| 7 | -import java.util.List; | |
| 8 | 6 | import java.util.Set; |
| 9 | 7 | |
| 10 | 8 | /** | ... | ... |
yudao-framework/yudao-spring-boot-starter-data-permission/src/main/resources/META-INF/spring.factories
| 1 | 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ |
| 2 | - cn.iocoder.yudao.framework.datapermission.config.DataPermissionAutoConfiguration | |
| 2 | + cn.iocoder.yudao.framework.datapermission.config.YudaoDataPermissionAutoConfiguration,\ | |
| 3 | + cn.iocoder.yudao.framework.datapermission.config.YudaoDeptDataPermissionAutoConfiguration | ... | ... |
yudao-framework/yudao-spring-boot-starter-tenant/pom.xml
| ... | ... | @@ -23,11 +23,6 @@ |
| 23 | 23 | |
| 24 | 24 | <!-- Web 相关 --> |
| 25 | 25 | <dependency> |
| 26 | - <groupId>org.springframework.boot</groupId> | |
| 27 | - <artifactId>spring-boot-starter-web</artifactId> | |
| 28 | - </dependency> | |
| 29 | - | |
| 30 | - <dependency> | |
| 31 | 26 | <groupId>cn.iocoder.boot</groupId> |
| 32 | 27 | <artifactId>yudao-spring-boot-starter-security</artifactId> |
| 33 | 28 | </dependency> | ... | ... |