diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java index 77cfd610..2a0faf78 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java @@ -21,6 +21,8 @@ import org.springframework.web.bind.annotation.RequestParam; import javax.validation.constraints.NotNull; import java.util.List; +import java.util.Map; +import java.util.Set; /** * 产品相关 API @@ -102,4 +104,13 @@ public interface ProductApi { */ @PostMapping("api/auth/product/feature/relation/update") ApiResult updateFeatureRelation(@Validated @RequestBody List req); + + /** + * 查询指定工作台关联的服务包下的产品权限点 + * + * @param workspaceIds + * @return + */ + @PostMapping("/temp") + ApiResult>> queryProductFeatureRelationByWorkspace(Set workspaceIds); } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java index 9894c45f..591b34ba 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java @@ -1,10 +1,14 @@ package cn.axzo.tyr.client.feign; +import cn.axzo.framework.domain.web.result.ApiPageResult; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; +import cn.axzo.tyr.client.model.req.QueryRoleByNameReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; +import cn.axzo.tyr.client.model.req.RoleWithUserQueryReq; import cn.axzo.tyr.client.model.res.IsSuperAdminRes; import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes; +import cn.axzo.tyr.client.model.res.RoleWithUserRes; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO; import org.springframework.cloud.openfeign.FeignClient; @@ -14,6 +18,7 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; +import javax.validation.Valid; import javax.validation.constraints.NotNull; import java.util.List; @@ -72,4 +77,16 @@ public interface TyrSaasRoleApi { @PostMapping("/api/saasRole/isSuperAdmin") ApiResult> isSuperAdmin(@RequestBody List req); + /** + * 通过角色名字获取角色信息 + * @return + */ + @PostMapping("/api/saasRole/findRoleByName") + ApiResult> findRoleByName(@RequestBody @Valid QueryRoleByNameReq req); + + + /** 分页查询角色含用户 **/ + @PostMapping("/api/saasRole/queryWithUser") + ApiPageResult queryRoleWithUser(@RequestBody RoleWithUserQueryReq req); + } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleUserApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleUserApi.java index f8d26f67..5a290da0 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleUserApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleUserApi.java @@ -1,24 +1,19 @@ package cn.axzo.tyr.client.feign; +import java.util.List; + +import javax.validation.Valid; +import javax.validation.constraints.NotEmpty; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.roleuser.dto.CreateAdminRoleDTO; import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserRelationDTO; import cn.axzo.tyr.client.model.roleuser.dto.SuperAdminInfoDTO; -import cn.axzo.tyr.client.model.roleuser.req.CreateAgencyAdminRoleParam; -import cn.axzo.tyr.client.model.roleuser.req.CreateWorkspaceAdminRoleParam; -import cn.axzo.tyr.client.model.roleuser.req.DeleteUserRoleIncludeAdminParam; -import cn.axzo.tyr.client.model.roleuser.req.DeleteRoleUserParam; -import cn.axzo.tyr.client.model.roleuser.req.DeleteUserRoleParam; -import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam; -import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq; -import cn.axzo.tyr.client.model.roleuser.req.SuperAdminParam; -import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; - -import javax.validation.Valid; -import javax.validation.constraints.NotEmpty; -import java.util.List; +import cn.axzo.tyr.client.model.roleuser.req.*; /** * 角色 @@ -66,8 +61,8 @@ public interface TyrSaasRoleUserApi { @PostMapping("/api/saas-role-user/create-agency-admin-role") ApiResult createAgencyAdminRole(@RequestBody @Valid CreateAgencyAdminRoleParam param); - @PostMapping("/api/saas-role-user/create-workspace-admin-role") - ApiResult createWorkspaceAdminRole(@RequestBody @Valid @NotEmpty List params); + @PostMapping("/api/saas-role-user/create-super-admin-role") + ApiResult createSuperAdminRole(@RequestBody @Valid @NotEmpty CreateSuperAdminRoleParam param); /** * 移除用户权限,包含超管,一般用于移除超管权限 diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchPageReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchPageReq.java index 2451a09b..6f16df0d 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchPageReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchPageReq.java @@ -2,11 +2,8 @@ package cn.axzo.tyr.client.model.product; import cn.axzo.core.domain.PageRequest; -import lombok.AllArgsConstructor; -import lombok.Builder; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; import lombok.experimental.Accessors; /** diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QueryRoleByNameReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QueryRoleByNameReq.java new file mode 100644 index 00000000..8fac7a6f --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QueryRoleByNameReq.java @@ -0,0 +1,21 @@ +package cn.axzo.tyr.client.model.req; + +import cn.axzo.tyr.client.model.base.BaseWorkspaceAndOuModel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotEmpty; +import java.util.List; + +/** + * @author honghao.zhang + * @since 2023/10/18 16:08 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class QueryRoleByNameReq extends BaseWorkspaceAndOuModel { + + @NotEmpty(message = "角色名字不能为空") + private List roleNames; + +} \ No newline at end of file diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/RoleWithUserQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/RoleWithUserQueryReq.java new file mode 100644 index 00000000..4b24f694 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/RoleWithUserQueryReq.java @@ -0,0 +1,24 @@ +package cn.axzo.tyr.client.model.req; + +import cn.axzo.basics.common.page.PageRequest; +import lombok.Data; + +/** + * 角色-含用户查询参数 + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/10/16 17:58 + */ +@Data +public class RoleWithUserQueryReq extends PageRequest { + + /** 查询关键字 **/ + private String keyword; + + /** 企业组织ID **/ + private Long ouId; + + /** 工作台ID **/ + private Long workspaceId; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/RoleWithUserRes.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/RoleWithUserRes.java new file mode 100644 index 00000000..ce2a6e0d --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/RoleWithUserRes.java @@ -0,0 +1,44 @@ +package cn.axzo.tyr.client.model.res; + +import lombok.Data; + +import java.util.List; + +/** + * 角色用户响应 + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/10/16 17:50 + */ +@Data +public class RoleWithUserRes { + + /** 角色ID **/ + private Long roleId; + + /** 角色名称 **/ + private String roleName; + + /** 角色类型 **/ + private String roleType; + + /** 角色下用户 **/ + private List users; + + @Data + public static class UserVO { + + /** 身份ID **/ + private Long identityId; + + /** 身份类型 **/ + private Integer identityType; + + /** 名称 **/ + private String name; + + /** 组织节点ID **/ + private Long nodeId; + } +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/CreateWorkspaceAdminRoleParam.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/CreateSuperAdminRoleParam.java similarity index 61% rename from tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/CreateWorkspaceAdminRoleParam.java rename to tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/CreateSuperAdminRoleParam.java index 5fe62e57..3901cddf 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/CreateWorkspaceAdminRoleParam.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/CreateSuperAdminRoleParam.java @@ -1,14 +1,12 @@ package cn.axzo.tyr.client.model.roleuser.req; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; - -import cn.axzo.tyr.client.common.enums.RoleTypeEnum; import cn.axzo.tyr.client.model.enums.IdentityType; import lombok.Data; +import javax.validation.constraints.NotNull; + @Data -public class CreateWorkspaceAdminRoleParam { +public class CreateSuperAdminRoleParam { /** * 工作台id,与context校验 @@ -23,21 +21,10 @@ public class CreateWorkspaceAdminRoleParam { private Long ouId; /** - * 手机号 + * 身份id */ - @NotBlank(message = "phone不能为空") - private String phone; - - /** - * 昵称 - */ - private String nickName; - - /** - * 角色Id,必填 - * 只能传SUPER_ADMIN,ADMIN - */ - private RoleTypeEnum roleType; + @NotNull(message = "identityId不能为空") + private Long identityId; /** * 身份类型 @@ -48,4 +35,6 @@ public class CreateWorkspaceAdminRoleParam { @NotNull(message = "workspaceType不能为空") private Integer workspaceType; + private Long naturalPersonId; + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/config/FeignConfig.java b/tyr-server/src/main/java/cn/axzo/tyr/server/config/FeignConfig.java index 0671779d..e9e0deab 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/config/FeignConfig.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/config/FeignConfig.java @@ -30,6 +30,9 @@ public class FeignConfig implements RequestInterceptor, EnvironmentAware { @Value("${sennaEnvUrl:http://dev-app.axzo.cn/workflow-engine}") private String workflowEnvUrl; + @Value("${thronesEnvUrl:http://dev-app.axzo.cn/thrones}") + private String thronesEnvUrl; + private static String POD_NAMESPACE; static { @@ -49,6 +52,7 @@ public class FeignConfig implements RequestInterceptor, EnvironmentAware { // 如需修改微服务地址,建议通过外部化参数来调整 url = url.replace("http://msg-center:8080", msgCenterEnvUrl); url = url.replace("http://workflow-engine:8080", workflowEnvUrl); + url = url.replace("http://thrones", thronesEnvUrl); String profile = environment.getProperty("spring.profiles.active"); if(Objects.equals(profile, "test") && url.contains("dev-app.axzo.cn")) { url = url.replace("dev-app", "test-api"); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/product/ProductController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/product/ProductController.java index c3ae5fb8..0dda138e 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/product/ProductController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/product/ProductController.java @@ -20,6 +20,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import java.util.List; +import java.util.Map; +import java.util.Set; /** * 产品相关 API 实现 @@ -124,4 +126,10 @@ public class ProductController implements ProductApi { } return productFeatureRelationService.updateFeatureRelation(req); } + + + @Override + public ApiResult>> queryProductFeatureRelationByWorkspace(Set workspaceIds) { + return ApiResult.ok(productFeatureRelationService.getByWorkspace(workspaceIds)); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java index 45f3dd69..2012bea3 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java @@ -1,12 +1,16 @@ package cn.axzo.tyr.server.controller.role; import cn.axzo.basics.common.exception.ServiceException; +import cn.axzo.framework.domain.web.result.ApiPageResult; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.TyrSaasRoleApi; import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; +import cn.axzo.tyr.client.model.req.QueryRoleByNameReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; +import cn.axzo.tyr.client.model.req.RoleWithUserQueryReq; import cn.axzo.tyr.client.model.res.IsSuperAdminRes; import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes; +import cn.axzo.tyr.client.model.res.RoleWithUserRes; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO; import cn.axzo.tyr.server.service.RoleService; @@ -74,4 +78,14 @@ public class SaasRoleController implements TyrSaasRoleApi { return ApiResult.ok(roleService.isSuperAdmin(req)); } + @Override + public ApiResult> findRoleByName(QueryRoleByNameReq req) { + return ApiResult.ok(roleService.findRoleByName(req)); + } + + @Override + public ApiPageResult queryRoleWithUser(RoleWithUserQueryReq req) { + return ApiPageResult.ok(roleService.queryRoleWithUser(req)); + } + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java index bb1137da..cdb1be21 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java @@ -1,12 +1,5 @@ package cn.axzo.tyr.server.controller.roleuser; -import java.util.List; - -import javax.validation.Valid; - -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; - import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.TyrSaasRoleUserApi; import cn.axzo.tyr.client.model.roleuser.dto.CreateAdminRoleDTO; @@ -17,6 +10,11 @@ import cn.axzo.tyr.server.service.SaasRoleUserRelationService; import cn.axzo.tyr.server.service.SaasRoleUserService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; +import java.util.List; /** * @author tanjie@axzo.cn @@ -63,9 +61,9 @@ public class RoleUserController implements TyrSaasRoleUserApi { } @Override - public ApiResult createWorkspaceAdminRole(List params) { - // todo cn.axzo.basics.auth.api.SaasRoleApi#grantAdminRoleByPhone - return ApiResult.ok(new CreateAdminRoleDTO()); + public ApiResult createSuperAdminRole(CreateSuperAdminRoleParam param) { + saasRoleUserService.createSuperAdminRole(param); + return ApiResult.ok(); } @Override diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleDao.java index 4a445d8c..bd044f10 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleDao.java @@ -2,10 +2,12 @@ package cn.axzo.tyr.server.repository.dao; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import cn.axzo.tyr.client.common.enums.RoleTypeEnum; import cn.axzo.tyr.client.model.enums.IdentityType; import cn.axzo.tyr.server.repository.entity.SaasRole; import cn.axzo.tyr.server.repository.entity.SaasRoleWithUser; import cn.axzo.tyr.server.repository.mapper.SaasRoleMapper; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.collections.CollectionUtils; import org.springframework.stereotype.Repository; @@ -53,5 +55,40 @@ public class SaasRoleDao extends ServiceImpl { } return this.getBaseMapper().listRoleUserByPermissionGroup(permissionGroupIdList, workspaceIds); } + + public SaasRole findRoleByTypeAndWorkspaceIdAndOuId(String roleType, Long workspaceId, + Long ouId) { + List list = this.lambdaQuery() + .eq(SaasRole::getRoleType, roleType) + .eq(SaasRole::getWorkspaceId, workspaceId) + .eq(SaasRole::getOwnerOuId, ouId) + .eq(SaasRole::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .list(); + if(CollUtil.isEmpty(list)){ + return null; + } + return list.get(0); + } + + public List listCommonRoleByNameAndWorkspaceIdAndOuId(String name, Long workspaceId, + Long ouId) { + return lambdaQuery().eq(SaasRole::getName, name) + .eq(SaasRole::getWorkspaceId, workspaceId) + .eq(SaasRole::getOwnerOuId, ouId) + .eq(SaasRole::getRoleType, RoleTypeEnum.COMMON.getValue()) + .eq(SaasRole::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .select(SaasRole::getId) + .list(); + } + + public List findRoleByName(Long ouId, Long workspaceId, + List roleNames) { + return this.lambdaQuery() + .eq(workspaceId != null && workspaceId != 0, SaasRole::getWorkspaceId, workspaceId) + .eq(ouId != null && ouId != 0, SaasRole::getOwnerOuId, ouId) + .in(CollectionUtils.isNotEmpty(roleNames), SaasRole::getName, roleNames) + .eq(SaasRole::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + } + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java index dd53ae73..6349ecb2 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java @@ -1,11 +1,14 @@ package cn.axzo.tyr.server.service; -import cn.axzo.tyr.client.common.enums.WorkspaceJoinType; +import cn.axzo.framework.domain.page.PageResp; import cn.axzo.tyr.client.model.enums.IdentityType; import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; +import cn.axzo.tyr.client.model.req.QueryRoleByNameReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; +import cn.axzo.tyr.client.model.req.RoleWithUserQueryReq; import cn.axzo.tyr.client.model.res.IsSuperAdminRes; import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes; +import cn.axzo.tyr.client.model.res.RoleWithUserRes; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO; import cn.axzo.tyr.server.repository.entity.SaasRoleWithUser; @@ -51,4 +54,12 @@ public interface RoleService { */ Set filterPermissionPoint(Set role, TyrSaasAuthServiceImpl.UserRoleInfoMap userRoleInfoMap); + /** + * 通过角色名字获取角色信息 + * @param req + * @return + */ + List findRoleByName(QueryRoleByNameReq req); + /** 分页查询角色含用户 **/ + PageResp queryRoleWithUser(RoleWithUserQueryReq req); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserService.java index 64484962..e518c9b6 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserService.java @@ -1,16 +1,12 @@ package cn.axzo.tyr.server.service; -import cn.axzo.tyr.client.model.enums.IdentityType; -import cn.axzo.tyr.client.model.roleuser.req.DeleteRoleUserParam; -import cn.axzo.tyr.client.model.roleuser.req.DeleteUserRoleParam; -import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq; -import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; - import java.util.List; import java.util.Set; +import cn.axzo.tyr.client.model.enums.IdentityType; import cn.axzo.tyr.client.model.roleuser.dto.SuperAdminInfoDTO; import cn.axzo.tyr.client.model.roleuser.req.*; +import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; /** * @author tanjie@axzo.cn @@ -62,6 +58,12 @@ public interface SaasRoleUserService { */ List queryByWorkspaceIdOrOu(Long identityId, IdentityType identityType, Set workspaceIds, Set ouIds); + /** + * workpaceId + ownerOuId + roleId + 手机号 + 姓名 赋予角色(支持角色赋予的同时 角色创建) + * work for: 组织 + 服务包 + */ + void createSuperAdminRole(CreateSuperAdminRoleParam param); + /** * 批量获取超管信息 * @param param diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index d1448da1..3d5d0ca3 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -2,32 +2,32 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.basics.common.exception.ServiceException; +import cn.axzo.framework.domain.page.PageResp; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.common.enums.RoleTypeEnum; -import cn.axzo.tyr.client.common.enums.WorkspaceJoinType; -import cn.axzo.tyr.client.feign.SaasRoleGroupApi; import cn.axzo.tyr.client.model.enums.IdentityType; import cn.axzo.tyr.client.model.enums.PermissionGroupType; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; +import cn.axzo.tyr.client.model.req.*; import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; +import cn.axzo.tyr.client.model.req.RoleWithUserQueryReq; import cn.axzo.tyr.client.model.res.IsSuperAdminRes; import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes; +import cn.axzo.tyr.client.model.res.RoleWithUserRes; import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO; import cn.axzo.tyr.server.repository.dao.*; import cn.axzo.tyr.server.repository.entity.*; -import cn.axzo.tyr.server.service.PermissionGroupService; -import cn.axzo.tyr.server.service.RoleService; -import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationService; -import cn.axzo.tyr.server.service.SaasRoleGroupRelationService; -import cn.axzo.tyr.server.service.SaasRoleGroupService; +import cn.axzo.tyr.server.service.*; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -76,6 +76,9 @@ public class RoleServiceImpl implements RoleService { @Autowired SaasRoleGroupService saasRoleGroupService; + @Autowired + SaasRoleUserRelationDao saasRoleUserRelationDao; + @Override public List queryByIdentityIdType(Long identityId, Integer identityType, Long workspaceId, Long ouId) { // 查询人关联的角色id @@ -187,13 +190,13 @@ public class RoleServiceImpl implements RoleService { } // 查询角色 List list = saasRoleDao.lambdaQuery() - .in(CollectionUtils.isNotEmpty(req.getIds()), BaseEntity::getId, req.getIds()) - .in(CollectionUtils.isNotEmpty(groupRelation), BaseEntity::getId, groupRelation.stream().map(SaasRoleGroupRelation::getRoleId).collect(Collectors.toList())) - .in(CollectionUtils.isNotEmpty(req.getRoleType()), SaasRole::getRoleType, req.getRoleType()) - .in(CollectionUtils.isEmpty(req.getIds()) && CollectionUtils.isNotEmpty(req.getWorkspaceId()),SaasRole::getWorkspaceId,req.getWorkspaceId()) - .in(CollectionUtils.isEmpty(req.getIds()) && CollectionUtils.isNotEmpty(req.getOuId()),SaasRole::getOwnerOuId,req.getOuId()) - .orderByDesc(BaseEntity::getId) - .list(); + .in(CollectionUtils.isNotEmpty(req.getIds()), BaseEntity::getId, req.getIds()) + .in(CollectionUtils.isNotEmpty(groupRelation), BaseEntity::getId, groupRelation.stream().map(SaasRoleGroupRelation::getRoleId).collect(Collectors.toList())) + .in(CollectionUtils.isNotEmpty(req.getRoleType()), SaasRole::getRoleType, req.getRoleType()) + .in(CollectionUtils.isEmpty(req.getIds()) && CollectionUtils.isNotEmpty(req.getWorkspaceId()),SaasRole::getWorkspaceId,req.getWorkspaceId()) + .in(CollectionUtils.isEmpty(req.getIds()) && CollectionUtils.isNotEmpty(req.getOuId()),SaasRole::getOwnerOuId,req.getOuId()) + .orderByDesc(BaseEntity::getId) + .list(); return getByIds(list.stream().map(BaseEntity::getId).collect(Collectors.toList()), req.getIsCommon(),req.getWorkspaceId(),req.getOuId(),req.getIncludePermissionGroup()); } @@ -446,4 +449,53 @@ public class RoleServiceImpl implements RoleService { .map(PermissionPointTreeNode::getPermissionPointId) .collect(Collectors.toSet()); } + + @Override + public PageResp queryRoleWithUser(RoleWithUserQueryReq req) { + //按role进行分页查询 + Page rolePage = saasRoleDao + .page(new Page<>(req.getPage(), req.getPageSize()), + new LambdaQueryWrapper() + .eq(SaasRole::getOwnerOuId, req.getOuId()) + .eq(SaasRole::getWorkspaceId, req.getWorkspaceId()) + .ne(SaasRole::getRoleType, RoleTypeEnum.SUPER_ADMIN.getValue())); + if (CollectionUtil.isEmpty(rolePage.getRecords())) { + return PageResp.list(req.getPage(), req.getPageSize(), 0L, Collections.emptyList()); + } + + //反查relation + List roleIds = rolePage.getRecords().stream().map(SaasRole::getId).collect(Collectors.toList()); + List relationList = saasRoleUserRelationDao.list(new LambdaQueryWrapper(). + in(SaasRoleUserRelation::getRoleId, roleIds)); + Map> relationMap = relationList.stream().collect(Collectors.groupingBy(SaasRoleUserRelation::getRoleId)); + + // 结果组装 - 用户信息到yoke组装 + List resultData = new ArrayList<>(); + for (SaasRole role : rolePage.getRecords()) { + RoleWithUserRes roleWithUser = new RoleWithUserRes(); + roleWithUser.setRoleId(role.getId()); + roleWithUser.setRoleName(role.getName()); + roleWithUser.setRoleType(role.getRoleType()); + + List relations = relationMap.get(role.getId()); + if (CollectionUtil.isNotEmpty(relations)) { + List users = relations.stream().map(e -> { + RoleWithUserRes.UserVO user = new RoleWithUserRes.UserVO(); + user.setIdentityId(e.getIdentityId()); + user.setIdentityType(e.getIdentityType()); + return user; + }).collect(Collectors.toList()); + roleWithUser.setUsers(users); + } + resultData.add(roleWithUser); + } + + return PageResp.list(req.getPage(), req.getPageSize(), rolePage.getTotal(), resultData); + } + + @Override + public List findRoleByName(QueryRoleByNameReq req) { + List roleList = saasRoleDao.findRoleByName(req.getOuId(), req.getWorkspaceId(), req.getRoleNames()); + return BeanUtil.copyToList(roleList, SaasRoleVO.class); + } } 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 4c580cc8..8039ecd7 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 @@ -1,19 +1,8 @@ package cn.axzo.tyr.server.service.impl; -import java.util.Collections; -import java.util.List; -import java.util.Objects; -import java.util.Set; -import java.util.stream.Collectors; - -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.alibaba.nacos.common.utils.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; - import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.basics.common.exception.ServiceException; +import cn.axzo.basics.common.util.AssertUtil; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.common.enums.RoleTypeEnum; import cn.axzo.tyr.client.model.BaseWorkspaceModel; @@ -26,8 +15,19 @@ import cn.axzo.tyr.server.repository.entity.SaasRole; import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; import cn.axzo.tyr.server.service.SaasRoleUserService; import cn.hutool.core.collection.CollectionUtil; +import com.alibaba.nacos.common.utils.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; /** * 角色 @@ -147,6 +147,46 @@ public class RoleUserService implements SaasRoleUserService { return roleUserRelationDao.queryByWorkspaceIdOrOu(identityId, identityType, workspaceIds, ouIds); } + @Override + @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); + + checkRoleName(RoleTypeEnum.SUPER_ADMIN.getDesc(), param.getWorkspaceId(), param.getOuId()); + saasRoleDao.save(saasRole); + } + //删除当前超管角色 + roleUserRelationDao.deleteByRoldId(Lists.newArrayList(saasRole.getId())); + + //新增关联关系 + SaasRoleUserRelation saasRoleUserRelation = new SaasRoleUserRelation(); + saasRoleUserRelation.setIdentityId(param.getIdentityId()); + saasRoleUserRelation.setRoleId(saasRole.getId()); + saasRoleUserRelation.setIdentityType(param.getIdentityType().getCode()); + saasRoleUserRelation.setNaturalPersonId(param.getNaturalPersonId()); + saasRoleUserRelation.setOuId(param.getOuId()); + saasRoleUserRelation.setWorkspaceId(param.getWorkspaceId()); + roleUserRelationDao.save(saasRoleUserRelation); + } + + private void checkRoleName(String name, Long workspaceId, Long ouId) { + List saasRoles = saasRoleDao.listCommonRoleByNameAndWorkspaceIdAndOuId(name, + workspaceId, ouId); + AssertUtil.isEmpty(saasRoles, "已存在相同的角色名称,请更换角色名称"); + } + @Override public List superAdminList(SuperAdminParam param) { if (param.getWorkspaceId() == null || CollectionUtil.isEmpty(param.getOuIds())) { diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/RoleUserTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/RoleUserTest.java index 256fd9d6..01c6ccda 100644 --- a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/RoleUserTest.java +++ b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/RoleUserTest.java @@ -1,11 +1,17 @@ package cn.axzo.tyr.server.permission; +import cn.axzo.framework.domain.web.result.ApiPageResult; import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.feign.TyrSaasRoleApi; import cn.axzo.tyr.client.model.BaseWorkspaceModel; import cn.axzo.tyr.client.model.enums.FeatureType; import cn.axzo.tyr.client.model.enums.IdentityType; +import cn.axzo.tyr.client.model.req.RoleWithUserQueryReq; +import cn.axzo.tyr.client.model.res.RoleWithUserRes; +import cn.axzo.tyr.server.controller.role.SaasRoleController; import cn.axzo.tyr.server.repository.dao.SaasFeatureDao; import cn.axzo.tyr.server.repository.dao.SaasRoleUserRelationDao; +import com.alibaba.fastjson.JSON; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -27,6 +33,9 @@ public class RoleUserTest { @Autowired private SaasFeatureDao saasFeatureDao; + @Autowired + private SaasRoleController controller; + @Test public void testList() { saasRoleUserRelationDao.deleteByUser(BaseWorkspaceModel.builder() @@ -39,5 +48,16 @@ public class RoleUserTest { .build(), Arrays.asList(4l)); } + @Test + public void testQuery() { + RoleWithUserQueryReq request = new RoleWithUserQueryReq(); + request.setOuId(5195L); + request.setWorkspaceId(232L); + request.setPage(1L); + request.setPageSize(5L); + ApiPageResult result = controller.queryRoleWithUser(request); + System.out.println(JSON.toJSONString(result)); + } + }