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 | package cn.iocoder.yudao.adminserver.modules.system.service.permission; | 1 | package cn.iocoder.yudao.adminserver.modules.system.service.permission; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.yudao.framework.datapermission.core.dept.service.DeptDataPermissionFrameworkService; | ||
| 3 | import cn.iocoder.yudao.framework.security.core.service.SecurityPermissionFrameworkService; | 4 | import cn.iocoder.yudao.framework.security.core.service.SecurityPermissionFrameworkService; |
| 4 | import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysMenuDO; | 5 | import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysMenuDO; |
| 5 | import org.springframework.lang.Nullable; | 6 | import org.springframework.lang.Nullable; |
| @@ -15,7 +16,7 @@ import java.util.Set; | @@ -15,7 +16,7 @@ import java.util.Set; | ||
| 15 | * | 16 | * |
| 16 | * @author 芋道源码 | 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,19 +3,25 @@ package cn.iocoder.yudao.adminserver.modules.system.service.permission.impl; | ||
| 3 | import cn.hutool.core.collection.CollUtil; | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | import cn.hutool.core.collection.CollectionUtil; | 4 | import cn.hutool.core.collection.CollectionUtil; |
| 5 | import cn.hutool.core.util.ArrayUtil; | 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 | import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysMenuDO; | 7 | import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysMenuDO; |
| 10 | import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleDO; | 8 | import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleDO; |
| 11 | import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleMenuDO; | 9 | import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleMenuDO; |
| 12 | import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysUserRoleDO; | 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 | import cn.iocoder.yudao.adminserver.modules.system.mq.producer.permission.SysPermissionProducer; | 13 | import cn.iocoder.yudao.adminserver.modules.system.mq.producer.permission.SysPermissionProducer; |
| 14 | +import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; | ||
| 14 | import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysMenuService; | 15 | import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysMenuService; |
| 15 | import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService; | 16 | import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService; |
| 16 | import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysRoleService; | 17 | import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysRoleService; |
| 17 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | 18 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| 18 | import cn.iocoder.yudao.framework.common.util.collection.MapUtils; | 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 | import com.google.common.collect.ImmutableMultimap; | 25 | import com.google.common.collect.ImmutableMultimap; |
| 20 | import com.google.common.collect.Multimap; | 26 | import com.google.common.collect.Multimap; |
| 21 | import com.google.common.collect.Sets; | 27 | import com.google.common.collect.Sets; |
| @@ -40,6 +46,11 @@ import java.util.*; | @@ -40,6 +46,11 @@ import java.util.*; | ||
| 40 | public class SysPermissionServiceImpl implements SysPermissionService { | 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 | * 定时执行 {@link #schedulePeriodicRefresh()} 的周期 | 54 | * 定时执行 {@link #schedulePeriodicRefresh()} 的周期 |
| 44 | * 因为已经通过 Redis Pub/Sub 机制,所以频率不需要高 | 55 | * 因为已经通过 Redis Pub/Sub 机制,所以频率不需要高 |
| 45 | */ | 56 | */ |
| @@ -75,6 +86,8 @@ public class SysPermissionServiceImpl implements SysPermissionService { | @@ -75,6 +86,8 @@ public class SysPermissionServiceImpl implements SysPermissionService { | ||
| 75 | private SysRoleService roleService; | 86 | private SysRoleService roleService; |
| 76 | @Resource | 87 | @Resource |
| 77 | private SysMenuService menuService; | 88 | private SysMenuService menuService; |
| 89 | + @Resource | ||
| 90 | + private SysDeptService deptService; | ||
| 78 | 91 | ||
| 79 | @Resource | 92 | @Resource |
| 80 | private SysPermissionProducer permissionProducer; | 93 | private SysPermissionProducer permissionProducer; |
| @@ -329,4 +342,58 @@ public class SysPermissionServiceImpl implements SysPermissionService { | @@ -329,4 +342,58 @@ public class SysPermissionServiceImpl implements SysPermissionService { | ||
| 329 | return CollUtil.containsAny(userRoles, Sets.newHashSet(roles)); | 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,6 +21,13 @@ | ||
| 21 | <artifactId>yudao-common</artifactId> | 21 | <artifactId>yudao-common</artifactId> |
| 22 | </dependency> | 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 | <!-- DB 相关 --> | 31 | <!-- DB 相关 --> |
| 25 | <dependency> | 32 | <dependency> |
| 26 | <groupId>cn.iocoder.boot</groupId> | 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,7 +18,7 @@ import java.util.List; | ||
| 18 | * @author 芋道源码 | 18 | * @author 芋道源码 |
| 19 | */ | 19 | */ |
| 20 | @Configuration | 20 | @Configuration |
| 21 | -public class DataPermissionAutoConfiguration { | 21 | +public class YudaoDataPermissionAutoConfiguration { |
| 22 | 22 | ||
| 23 | @Bean | 23 | @Bean |
| 24 | public DataPermissionRuleFactory dataPermissionRuleFactory(List<DataPermissionRule> rules) { | 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 | import cn.hutool.core.collection.CollUtil; | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | import cn.hutool.core.util.StrUtil; | 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 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | 7 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| 8 | import cn.iocoder.yudao.framework.common.util.json.JsonUtils; | 8 | import cn.iocoder.yudao.framework.common.util.json.JsonUtils; |
| 9 | import cn.iocoder.yudao.framework.datapermission.core.rule.DataPermissionRule; | 9 | import cn.iocoder.yudao.framework.datapermission.core.rule.DataPermissionRule; |
| @@ -51,7 +51,7 @@ public class DeptDataPermissionRule implements DataPermissionRule { | @@ -51,7 +51,7 @@ public class DeptDataPermissionRule implements DataPermissionRule { | ||
| 51 | private static final String DEPT_COLUMN_NAME = "dept_id"; | 51 | private static final String DEPT_COLUMN_NAME = "dept_id"; |
| 52 | private static final String USER_COLUMN_NAME = "user_id"; | 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,7 +60,7 @@ public class DeptDataPermissionRule implements DataPermissionRule { | ||
| 60 | * key:表名 | 60 | * key:表名 |
| 61 | * value:字段名 | 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 | * 一般情况下,每个表的部门编号字段是 dept_id,通过该配置自定义。 | 66 | * 一般情况下,每个表的部门编号字段是 dept_id,通过该配置自定义。 |
| @@ -68,9 +68,9 @@ public class DeptDataPermissionRule implements DataPermissionRule { | @@ -68,9 +68,9 @@ public class DeptDataPermissionRule implements DataPermissionRule { | ||
| 68 | * key:表名 | 68 | * key:表名 |
| 69 | * value:字段名 | 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 | private final Set<String> TABLE_NAMES = new HashSet<>(); | 75 | private final Set<String> TABLE_NAMES = new HashSet<>(); |
| 76 | 76 | ||
| @@ -126,7 +126,7 @@ public class DeptDataPermissionRule implements DataPermissionRule { | @@ -126,7 +126,7 @@ public class DeptDataPermissionRule implements DataPermissionRule { | ||
| 126 | 126 | ||
| 127 | private Expression buildDeptExpression(String tableName, Alias tableAlias, Set<Long> deptIds) { | 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 | if (StrUtil.isEmpty(columnName)) { | 130 | if (StrUtil.isEmpty(columnName)) { |
| 131 | return null; | 131 | return null; |
| 132 | } | 132 | } |
| @@ -140,7 +140,7 @@ public class DeptDataPermissionRule implements DataPermissionRule { | @@ -140,7 +140,7 @@ public class DeptDataPermissionRule implements DataPermissionRule { | ||
| 140 | if (Boolean.FALSE.equals(self)) { | 140 | if (Boolean.FALSE.equals(self)) { |
| 141 | return null; | 141 | return null; |
| 142 | } | 142 | } |
| 143 | - String columnName = USER_TABLE_CONFIG.get(tableName); | 143 | + String columnName = userColumns.get(tableName); |
| 144 | if (StrUtil.isEmpty(columnName)) { | 144 | if (StrUtil.isEmpty(columnName)) { |
| 145 | return null; | 145 | return null; |
| 146 | } | 146 | } |
| @@ -150,23 +150,23 @@ public class DeptDataPermissionRule implements DataPermissionRule { | @@ -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 | String tableName = TableInfoHelper.getTableInfo(entityClass).getTableName(); | 158 | String tableName = TableInfoHelper.getTableInfo(entityClass).getTableName(); |
| 159 | - DEPT_TABLE_CONFIG.put(tableName, columnName); | 159 | + deptColumns.put(tableName, columnName); |
| 160 | TABLE_NAMES.add(tableName); | 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 | String tableName = TableInfoHelper.getTableInfo(entityClass).getTableName(); | 168 | String tableName = TableInfoHelper.getTableInfo(entityClass).getTableName(); |
| 169 | - USER_TABLE_CONFIG.put(tableName, columnName); | 169 | + userColumns.put(tableName, columnName); |
| 170 | TABLE_NAMES.add(tableName); | 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 | import cn.iocoder.yudao.framework.security.core.LoginUser; | 4 | import cn.iocoder.yudao.framework.security.core.LoginUser; |
| 5 | 5 | ||
| 6 | /** | 6 | /** |
| 7 | - * 基于部门的数据权限 Service 接口 | 7 | + * 基于部门的数据权限 Framework Service 接口 |
| 8 | + * 目前的实现类是 SysPermissionServiceImpl 类 | ||
| 8 | * | 9 | * |
| 9 | * @author 芋道源码 | 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 | import lombok.Data; | 3 | import lombok.Data; |
| 4 | 4 | ||
| 5 | -import java.util.ArrayList; | ||
| 6 | import java.util.HashSet; | 5 | import java.util.HashSet; |
| 7 | -import java.util.List; | ||
| 8 | import java.util.Set; | 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 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ | 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,11 +23,6 @@ | ||
| 23 | 23 | ||
| 24 | <!-- Web 相关 --> | 24 | <!-- Web 相关 --> |
| 25 | <dependency> | 25 | <dependency> |
| 26 | - <groupId>org.springframework.boot</groupId> | ||
| 27 | - <artifactId>spring-boot-starter-web</artifactId> | ||
| 28 | - </dependency> | ||
| 29 | - | ||
| 30 | - <dependency> | ||
| 31 | <groupId>cn.iocoder.boot</groupId> | 26 | <groupId>cn.iocoder.boot</groupId> |
| 32 | <artifactId>yudao-spring-boot-starter-security</artifactId> | 27 | <artifactId>yudao-spring-boot-starter-security</artifactId> |
| 33 | </dependency> | 28 | </dependency> |