From 4cf6494758a9ab3f4194910eb6711940d84f0279 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Wed, 17 Apr 2024 13:53:48 +0800 Subject: [PATCH] =?UTF-8?q?feat:(2227-superAdmin):=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E8=B6=85=E7=AE=A1=E5=88=9B=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/PermissionQueryServiceImpl.java | 1 + .../server/service/impl/RoleUserService.java | 58 ++++++++++++++----- 2 files changed, 43 insertions(+), 16 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionQueryServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionQueryServiceImpl.java index dd26d6da..cefcf931 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionQueryServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionQueryServiceImpl.java @@ -89,6 +89,7 @@ public class PermissionQueryServiceImpl implements PermissionQueryService { .collect(Collectors.toList()); //反查资源信息 List resourceList = featureResourceService.listNavByIds(featureIds); + //TODO: 默认只支持两级 List menuIds = resourceList.stream() .filter(r -> FeatureResourceType.PAGE.apply(r.getFeatureType())) .map(SaasFeatureResource::getParentId) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java index 85eb749c..e9fb9024 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java @@ -26,6 +26,7 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.alibaba.nacos.common.utils.CollectionUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.google.common.collect.Lists; import com.google.common.collect.Sets; @@ -67,6 +68,9 @@ public class RoleUserService implements SaasRoleUserService { @Value("${platWorkerLeaderRoleId:100001}") private Long projWorkerLeaderRoleId; + @Value("${axzo.role.superAdmin: {1:\"entSuperAdmin\", 2: \"projSuperAdmin\", 6:\"omsSuperAdmin\"}}") + private Map superAdminCodes; + /** * 获取分包负责人等特殊角色 * @return @@ -173,31 +177,29 @@ public class RoleUserService implements SaasRoleUserService { @Transactional(rollbackFor = Exception.class) public void createSuperAdminRole(CreateSuperAdminRoleParam param) { //获取超管角色 - SaasRole saasRole = saasRoleDao - .findRoleByTypeAndWorkspaceIdAndOuId(RoleTypeEnum.SUPER_ADMIN.getValue(), - param.getWorkspaceId(), param.getOuId()); - if (saasRole == null) { - saasRole = new SaasRole(); - saasRole.setDescription(RoleTypeEnum.SUPER_ADMIN.getDesc()); - saasRole.setName(RoleTypeEnum.SUPER_ADMIN.getDesc()); - saasRole.setWorkspaceId(param.getWorkspaceId()); - saasRole.setWorkspaceType(param.getWorkspaceType()); - saasRole.setOwnerOuId(param.getOuId()); - saasRole.setRoleType(RoleTypeEnum.SUPER_ADMIN.getValue()); - saasRole.setIsDelete(0L); + SaasRole superAdmin = findSuperAdmin(param.getWorkspaceId(), param.getOuId(), param.getWorkspaceType()); + if (superAdmin == null) { + superAdmin = new SaasRole(); + superAdmin.setDescription(RoleTypeEnum.SUPER_ADMIN.getDesc()); + superAdmin.setName(RoleTypeEnum.SUPER_ADMIN.getDesc()); + superAdmin.setWorkspaceId(param.getWorkspaceId()); + superAdmin.setWorkspaceType(param.getWorkspaceType()); + superAdmin.setOwnerOuId(param.getOuId()); + superAdmin.setRoleType(RoleTypeEnum.SUPER_ADMIN.getValue()); + superAdmin.setIsDelete(0L); DictWorkSpaceTypeEnum dictWorkSpaceTypeEnum = DictWorkSpaceTypeEnum.getByValueWorkspaceType(param.getWorkspaceType()); - saasRole.setProductUnitType(dictWorkSpaceTypeEnum == null ? 0 : dictWorkSpaceTypeEnum.getSuperAdminProductType()); + superAdmin.setProductUnitType(dictWorkSpaceTypeEnum == null ? 0 : dictWorkSpaceTypeEnum.getSuperAdminProductType()); checkRoleName(RoleTypeEnum.SUPER_ADMIN.getDesc(), param.getWorkspaceId(), param.getOuId()); - saasRoleDao.save(saasRole); + saasRoleDao.save(superAdmin); } //删除当前超管角色 - roleUserRelationDao.deleteByRoleId(Lists.newArrayList(saasRole.getId())); + removeOldSuperAdmin(superAdmin.getId(), param.getWorkspaceId(), param.getOuId()); //新增关联关系 SaasRoleUserRelation saasRoleUserRelation = new SaasRoleUserRelation(); saasRoleUserRelation.setIdentityId(param.getIdentityId()); - saasRoleUserRelation.setRoleId(saasRole.getId()); + saasRoleUserRelation.setRoleId(superAdmin.getId()); saasRoleUserRelation.setIdentityType(param.getIdentityType().getCode()); saasRoleUserRelation.setNaturalPersonId(param.getNaturalPersonId()); saasRoleUserRelation.setOuId(param.getOuId()); @@ -205,6 +207,30 @@ public class RoleUserService implements SaasRoleUserService { roleUserRelationDao.save(saasRoleUserRelation); } + private void removeOldSuperAdmin(Long id, Long workspaceId, Long ouId) { + saasRoleDao.remove(new LambdaQueryWrapper() + .eq(SaasRole::getId, id) + .eq(SaasRole::getWorkspaceId, workspaceId) + .eq(SaasRole::getOwnerOuId, ouId)); + } + + private SaasRole findSuperAdmin(Long workspaceId, Long ouId, Integer workspaceType) { + //优先取租户超管 没有再取标准角色超管 + //租户超管 + SaasRole superAdmin = saasRoleDao + .findRoleByTypeAndWorkspaceIdAndOuId(RoleTypeEnum.SUPER_ADMIN.getValue(), + workspaceId, ouId); + if (superAdmin != null) { + return superAdmin; + } + //标准角超管 + String superAdminCode = superAdminCodes.get(workspaceType); + if (StrUtil.isBlank(superAdminCode)) { + throw new ServiceException("租户类型[" + workspaceType + "]未配置超管编码"); + } + return saasRoleDao.lambdaQuery().eq(SaasRole::getRoleCode, superAdminCode).one(); + } + private void checkRoleName(String name, Long workspaceId, Long ouId) { List saasRoles = saasRoleDao.listCommonRoleByNameAndWorkspaceIdAndOuId(name, workspaceId, ouId);