diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dept/PostController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dept/PostController.java index ac0ae77cb..21248e311 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dept/PostController.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dept/PostController.java @@ -75,9 +75,9 @@ public class PostController { @GetMapping(value = {"/list-all-simple", "simple-list"}) @Operation(summary = "获取岗位全列表", description = "只包含被开启的岗位,主要用于前端的下拉选项") - public CommonResult> getSimplePostList() { + public CommonResult> getSimplePostList(@RequestParam(value = "organId", required = false) Long organId) { // 获得岗位列表,只要开启状态的 - List list = postService.getPostList(null, Collections.singleton(CommonStatusEnum.ENABLE.getStatus())); + List list = postService.getPostList(null, Collections.singleton(CommonStatusEnum.ENABLE.getStatus()), organId); // 排序后,返回给前端 list.sort(Comparator.comparing(PostDO::getSort)); return success(BeanUtils.toBean(list, PostSimpleRespVO.class)); diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/PermissionController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/PermissionController.java index bfdfb6466..bf7ec074f 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/PermissionController.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/PermissionController.java @@ -76,8 +76,9 @@ public class PermissionController { reqVO.getMenuIds().removeIf(menuId -> !CollUtil.contains(menuIds, menuId)); }); } + Long organId = reqVO.getOrganId() == null? OrganContextHolder.getOrganId(): reqVO.getOrganId(); // 执行菜单的分配 - permissionService.assignRoleMenu(reqVO.getRoleId(), reqVO.getMenuIds()); + permissionService.assignRoleMenu(reqVO.getRoleId(), reqVO.getMenuIds(), organId); return success(true); } @@ -101,7 +102,8 @@ public class PermissionController { @PostMapping("/assign-user-role") @PreAuthorize("@ss.hasPermission('system:permission:assign-user-role')") public CommonResult assignUserRole(@Validated @RequestBody PermissionAssignUserRoleReqVO reqVO) { - permissionService.assignUserRole(reqVO.getUserId(), reqVO.getRoleIds(),OrganContextHolder.getOrganId()); + Long organId = reqVO.getOrganId() == null ? OrganContextHolder.getOrganId() : reqVO.getOrganId(); + permissionService.assignUserRole(reqVO.getUserId(), reqVO.getRoleIds(), organId); return success(true); } @@ -124,4 +126,13 @@ public class PermissionController { return success(true); } + + @Operation(summary = "获得拥有角色的用户列表") + @Parameter(name = "roleId", description = "角色id", required = true) + @GetMapping("/list-role-users") + @PreAuthorize("@ss.hasPermission('system:permission:assign-user-role')") + public CommonResult> listRoleUsers(@RequestParam("roleId") Long roleId, @RequestParam(value = "organId", required = false) Long organId) { + return success(permissionService.getListRoleUsers(roleId, organId)); + } + } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java index 16e60b761..e54e9ca0e 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java @@ -18,4 +18,7 @@ public class PermissionAssignRoleMenuReqVO { @Schema(description = "菜单编号列表", example = "1,3,5") private Set menuIds = Collections.emptySet(); // 兜底 + @Schema(description = "组织id") + private Long organId; + } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/vo/permission/PermissionAssignUserRoleReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/vo/permission/PermissionAssignUserRoleReqVO.java index 415e43159..9b4976632 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/vo/permission/PermissionAssignUserRoleReqVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/vo/permission/PermissionAssignUserRoleReqVO.java @@ -18,4 +18,7 @@ public class PermissionAssignUserRoleReqVO { @Schema(description = "角色编号列表", example = "1,3,5") private Set roleIds = Collections.emptySet(); // 兜底 + @Schema(description = "组织id") + private Long organId; + } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/user/UserController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/user/UserController.java index 4dabfa7bb..7933cd45b 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/user/UserController.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/user/UserController.java @@ -126,8 +126,9 @@ public class UserController { @GetMapping({"/list-all-simple", "/simple-list"}) @Operation(summary = "获取用户精简信息列表", description = "只包含被开启的用户,主要用于前端的下拉选项") - public CommonResult> getSimpleUserList() { - List list = userService.getUserListByStatus(CommonStatusEnum.ENABLE.getStatus()); + public CommonResult> getSimpleUserList( @RequestParam(value = "organId", required = false) Long organId, + @RequestParam(value = "deptId", required = false) Long deptId) { + List list = userService.getUserListByStatus(CommonStatusEnum.ENABLE.getStatus(), organId, deptId); // 拼接数据 Map deptMap = deptService.getDeptMap( convertList(list, AdminUserDO::getDeptId)); diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/dept/PostMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/dept/PostMapper.java index 7bf197a9d..b1da2cfee 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/dept/PostMapper.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/dept/PostMapper.java @@ -17,8 +17,9 @@ import java.util.Objects; @Mapper public interface PostMapper extends BaseMapperX { - default List selectList(Collection ids, Collection statuses) { + default List selectList(Collection ids, Collection statuses, Long organId) { return selectList(new LambdaQueryWrapperX() + .eqIfPresent(PostDO::getOrganId, organId) .inIfPresent(PostDO::getId, ids) .inIfPresent(PostDO::getStatus, statuses)); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/user/AdminUserMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/user/AdminUserMapper.java index c385e55af..94ab1fb7c 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/user/AdminUserMapper.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/user/AdminUserMapper.java @@ -62,8 +62,12 @@ public interface AdminUserMapper extends BaseMapperX { return selectList(new LambdaQueryWrapperX().like(AdminUserDO::getNickname, nickname)); } - default List selectListByStatus(Integer status) { - return selectList(AdminUserDO::getStatus, status); + default List selectListByStatus(Integer status, Long organId, Long deptId) { + return selectList(new LambdaQueryWrapperX() + .eqIfPresent(AdminUserDO::getOrganId, organId) + .eqIfPresent(AdminUserDO::getDeptId, deptId) + .eq(AdminUserDO::getStatus, status)); + // return selectList(AdminUserDO::getStatus, status); } default List selectListByDeptIds(Collection deptIds) { diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dept/PostService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dept/PostService.java index 2b6c8ff72..f0cb157dd 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dept/PostService.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dept/PostService.java @@ -54,7 +54,9 @@ public interface PostService { * @return 部门列表 */ List getPostList(@Nullable Collection ids, - @Nullable Collection statuses); + @Nullable Collection statuses, + Long organId + ); /** * 获得岗位分页列表 diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dept/PostServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dept/PostServiceImpl.java index a6b873bb5..fcef0f50a 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dept/PostServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dept/PostServiceImpl.java @@ -118,8 +118,8 @@ public class PostServiceImpl implements PostService { } @Override - public List getPostList(Collection ids, Collection statuses) { - return postMapper.selectList(ids, statuses); + public List getPostList(Collection ids, Collection statuses, Long organId) { + return postMapper.selectList(ids, statuses, organId); } @Override diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/organ/OrganServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/organ/OrganServiceImpl.java index 64bfaa975..40f3c0dd4 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/organ/OrganServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/organ/OrganServiceImpl.java @@ -174,7 +174,7 @@ public class OrganServiceImpl implements OrganService { .setSort(0).setRemark("系统自动生成").setOrganId(organId); Long roleId = roleService.createRole(reqVO, RoleTypeEnum.SYSTEM.getType()); // 分配权限 - permissionService.assignRoleMenu(roleId, tenantPackage.getMenuIds()); + permissionService.assignRoleMenu(roleId, tenantPackage.getMenuIds(), organId); return roleId; } @@ -249,14 +249,14 @@ public class OrganServiceImpl implements OrganService { roles.forEach(role -> { // 如果是组织管理员,重新分配其权限为组织套餐的权限 if (Objects.equals(role.getCode(), RoleCodeEnum.TENANT_ADMIN.getCode())) { - permissionService.assignRoleMenu(role.getId(), menuIds); + permissionService.assignRoleMenu(role.getId(), menuIds, organId); log.info("[updateTenantRoleMenu][组织管理员({}/{}) 的权限修改为({})]", role.getId(), role.getOrganId(), menuIds); return; } // 如果是其他角色,则去掉超过套餐的权限 Set roleMenuIds = permissionService.getRoleMenuListByRoleId(role.getId()); roleMenuIds = CollUtil.intersectionDistinct(roleMenuIds, menuIds); - permissionService.assignRoleMenu(role.getId(), roleMenuIds); + permissionService.assignRoleMenu(role.getId(), roleMenuIds, organId); log.info("[updateTenantRoleMenu][角色({}/{}) 的权限修改为({})]", role.getId(), role.getOrganId(), roleMenuIds); }); }); diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/PermissionService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/PermissionService.java index 98eb5d99c..8a1019c2c 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/PermissionService.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/PermissionService.java @@ -43,7 +43,7 @@ public interface PermissionService { * @param roleId 角色编号 * @param menuIds 菜单编号集合 */ - void assignRoleMenu(Long roleId, Set menuIds); + void assignRoleMenu(Long roleId, Set menuIds, Long organId); /** * 处理角色删除时,删除关联授权数据 @@ -156,4 +156,11 @@ public interface PermissionService { Set getRoleMenuListByRoleId2(Set roleIds); void bathAssignUserRole(List listReqVO); + + /** + * 获得拥有角色的用户列表 + * @param roleId + * @return + */ + Set getListRoleUsers(Long roleId, Long organId); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/PermissionServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/PermissionServiceImpl.java index 587524f4d..13713855c 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/PermissionServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/PermissionServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.extra.spring.SpringUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.cf.imes.framework.common.enums.CommonStatusEnum; import com.cf.imes.framework.common.util.collection.CollectionUtils; import com.cf.imes.framework.datapermission.core.annotation.DataPermission; @@ -39,6 +40,7 @@ import javax.annotation.Resource; import java.util.*; import java.util.function.Function; import java.util.function.Supplier; +import java.util.stream.Collectors; import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.cf.imes.framework.common.util.collection.CollectionUtils.convertSet; @@ -146,7 +148,7 @@ public class PermissionServiceImpl implements PermissionService { @DSTransactional // 多数据源,使用 @DSTransactional 保证本地事务,以及数据源的切换 @CacheEvict(value = RedisKeyConstants.MENU_ROLE_ID_LIST, allEntries = true) // allEntries 清空所有缓存,主要一次更新涉及到的 menuIds 较多,反倒批量会更快 - public void assignRoleMenu(Long roleId, Set menuIds) { + public void assignRoleMenu(Long roleId, Set menuIds, Long organId) { // 获得角色拥有菜单编号 Set dbMenuIds = null; if (Objects.equals(roleId, ORGAN_ADMIN_ROLE_ID) || Objects.equals(roleId, ORGAN_STAFF_ROLE_ID)) { @@ -167,6 +169,8 @@ public class PermissionServiceImpl implements PermissionService { entity.setMenuId(menuId); if (Objects.equals(roleId, ORGAN_ADMIN_ROLE_ID) || Objects.equals(roleId, ORGAN_STAFF_ROLE_ID)) { entity.setOrganId(0L); + }else { + entity.setOrganId(organId); } return entity; }; @@ -238,12 +242,27 @@ public class PermissionServiceImpl implements PermissionService { @Override @DSTransactional public void bathAssignUserRole(List listReqVO) { - Long organId = OrganContextHolder.getOrganId(); + Long contextOrganId = OrganContextHolder.getOrganId(); listReqVO.forEach(e->{ + Long organId = e.getOrganId() ==null ? contextOrganId : e.getOrganId(); assignUserRole(e.getUserId(), e.getRoleIds(), organId); }); } + @Override + public Set getListRoleUsers(Long roleId, Long organId) { + List userRoleDOS = userRoleMapper.selectList(new LambdaQueryWrapperX() + .eqIfPresent(UserRoleDO::getOrganId, organId) + .eq(UserRoleDO::getRoleId, roleId) + .select(UserRoleDO::getUserId) + ); + if(CollUtil.isEmpty(userRoleDOS)) { + return new HashSet<>(); + } + return userRoleDOS.stream().map(UserRoleDO::getUserId).collect(Collectors.toSet()); + + } + @Override @Cacheable(value = RedisKeyConstants.MENU_ROLE_ID_LIST, key = "#menuId") public Set getMenuRoleIdListByMenuIdFromCache(Long menuId) { diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/user/AdminUserService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/user/AdminUserService.java index 503b0f8bc..ff4dd0cfd 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/user/AdminUserService.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/user/AdminUserService.java @@ -206,7 +206,7 @@ public interface AdminUserService { * @param status 状态 * @return 用户们 */ - List getUserListByStatus(Integer status); + List getUserListByStatus(Integer status, Long organId, Long deptId); /** * 判断密码是否匹配 diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/user/AdminUserServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/user/AdminUserServiceImpl.java index 599487b64..e98d94432 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/user/AdminUserServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/user/AdminUserServiceImpl.java @@ -489,8 +489,8 @@ public class AdminUserServiceImpl implements AdminUserService { } @Override - public List getUserListByStatus(Integer status) { - return userMapper.selectListByStatus(status); + public List getUserListByStatus(Integer status, Long organId, Long deptId) { + return userMapper.selectListByStatus(status, organId, deptId); } @Override diff --git a/cf-module-system/cf-module-system-biz/src/test/java/com/cf/imes/module/system/service/user/AdminUserServiceImplTest.java b/cf-module-system/cf-module-system-biz/src/test/java/com/cf/imes/module/system/service/user/AdminUserServiceImplTest.java index 489557363..b02baeab6 100644 --- a/cf-module-system/cf-module-system-biz/src/test/java/com/cf/imes/module/system/service/user/AdminUserServiceImplTest.java +++ b/cf-module-system/cf-module-system-biz/src/test/java/com/cf/imes/module/system/service/user/AdminUserServiceImplTest.java @@ -710,7 +710,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { Integer status = CommonStatusEnum.DISABLE.getStatus(); // 调用 - List result = userService.getUserListByStatus(status); + List result = userService.getUserListByStatus(status, 1L); // 断言 assertEquals(1, result.size()); assertEquals(user, result.get(0));