From 30e8e914aeaab9bf1f33229749b1933e951b0eec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=98=86=E9=B9=8F?= Date: Wed, 22 May 2024 17:03:34 +0800 Subject: [PATCH] =?UTF-8?q?feat(REQ-2298):=20=E5=A2=9E=E5=8A=A0=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E7=94=A8=E6=88=B7=E6=9D=83=E9=99=90=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/feign/TyrSaasRoleUserApi.java | 11 ++++- .../dto/GetUserFeatureResourceIdsResp.java | 25 +++++++++++ .../req/GetUserFeatureResourceIdsReq.java | 44 +++++++++++++++++++ .../roleuser/RoleUserController.java | 6 +++ .../server/service/SaasRoleUserService.java | 9 ++++ .../server/service/impl/RoleUserService.java | 28 +++++++++++- 6 files changed, 120 insertions(+), 3 deletions(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/dto/GetUserFeatureResourceIdsResp.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/GetUserFeatureResourceIdsReq.java 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 da634195..e48f0c00 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 @@ -3,6 +3,7 @@ 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.roleuser.dto.GetUserAutoOwnRoleResp; +import cn.axzo.tyr.client.model.roleuser.dto.GetUserFeatureResourceIdsResp; import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserDTO; import cn.axzo.tyr.client.model.roleuser.dto.SuperAminInfoResp; import cn.axzo.tyr.client.model.roleuser.req.*; @@ -106,11 +107,17 @@ public interface TyrSaasRoleUserApi { * 保存/更新 用户自定义权限,每次传入新的featureIds都会覆盖原来的所有featureIds */ @PostMapping("/api/saas-role-user/save-or-update-auto-own-role") - ApiResult saveOrUpdateAutoOwnRole(@RequestBody @Valid AutoOwnRoleUserReq req); + ApiResult saveOrUpdateAutoOwnRole(@RequestBody @Valid AutoOwnRoleUserReq req); /** * 查询用户自定义角色和权限 */ @PostMapping("/api/saas-role-user/get-auto-own-role") - ApiResult getUserAutoOwnRole(@RequestBody @Valid GetUserAutoOwnRoleReq req); + ApiResult getUserAutoOwnRole(@RequestBody @Valid GetUserAutoOwnRoleReq req); + + /** + * 查询用户权限(featureResourceId) + */ + @PostMapping("/api/saas-role-user/get-user-feature-resource-ids") + ApiResult getUserFeatureResourceIds(@RequestBody @Valid GetUserFeatureResourceIdsReq req); } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/dto/GetUserFeatureResourceIdsResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/dto/GetUserFeatureResourceIdsResp.java new file mode 100644 index 00000000..9523133e --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/dto/GetUserFeatureResourceIdsResp.java @@ -0,0 +1,25 @@ +package cn.axzo.tyr.client.model.roleuser.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Set; + +/** + * @author likunpeng + * @version 1.0 + * @date 2024/5/22 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class GetUserFeatureResourceIdsResp { + + /** + * 资源ID列表 + */ + private Set featureResourceIds; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/GetUserFeatureResourceIdsReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/GetUserFeatureResourceIdsReq.java new file mode 100644 index 00000000..b6a3036e --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/GetUserFeatureResourceIdsReq.java @@ -0,0 +1,44 @@ +package cn.axzo.tyr.client.model.roleuser.req; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotNull; +import java.util.List; + + +/** + * @author likunpeng + * @date 2024/4/2 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class GetUserFeatureResourceIdsReq { + + /** + * 工作台id + */ + @NotNull(message = "workspaceId不能为空") + private Long workspaceId; + + /** + * 单位id + */ + @NotNull(message = "ouId不能为空") + private Long ouId; + + /** + * 自然人id + */ + @NotNull(message = "personId不能为空") + private Long personId; + + /** + * 查询的角色类型列表 + */ + private List roleIds; +} 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 90a4b163..0c17e89c 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 @@ -7,6 +7,7 @@ import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.feign.TyrSaasRoleUserApi; import cn.axzo.tyr.client.model.enums.IdentityType; import cn.axzo.tyr.client.model.roleuser.dto.GetUserAutoOwnRoleResp; +import cn.axzo.tyr.client.model.roleuser.dto.GetUserFeatureResourceIdsResp; import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserDTO; import cn.axzo.tyr.client.model.roleuser.dto.SuperAminInfoResp; import cn.axzo.tyr.client.model.roleuser.req.*; @@ -162,4 +163,9 @@ public class RoleUserController implements TyrSaasRoleUserApi { public ApiResult getUserAutoOwnRole(GetUserAutoOwnRoleReq req) { return ApiResult.ok(saasRoleUserService.getUserAutoOwnRole(req)); } + + @Override + public ApiResult getUserFeatureResourceIds(GetUserFeatureResourceIdsReq req) { + return ApiResult.ok(saasRoleUserService.getUserFeatureResourceIds(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 60fae1fb..36321eee 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 @@ -2,6 +2,7 @@ package cn.axzo.tyr.server.service; import cn.axzo.tyr.client.model.enums.IdentityType; import cn.axzo.tyr.client.model.roleuser.dto.GetUserAutoOwnRoleResp; +import cn.axzo.tyr.client.model.roleuser.dto.GetUserFeatureResourceIdsResp; import cn.axzo.tyr.client.model.roleuser.dto.SuperAminInfoResp; import cn.axzo.tyr.client.model.roleuser.req.*; import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; @@ -97,4 +98,12 @@ public interface SaasRoleUserService { * @return */ GetUserAutoOwnRoleResp getUserAutoOwnRole(GetUserAutoOwnRoleReq req); + + /** + * 查询用户已有的功能资源 + * + * @param req + * @return + */ + GetUserFeatureResourceIdsResp getUserFeatureResourceIds(GetUserFeatureResourceIdsReq req); } \ No newline at end of file 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 629973c0..249fe25c 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 @@ -12,6 +12,7 @@ import cn.axzo.tyr.client.model.enums.DictWorkSpaceTypeEnum; import cn.axzo.tyr.client.model.enums.IdentityType; import cn.axzo.tyr.client.model.enums.WorkerLeaderRoleEnum; import cn.axzo.tyr.client.model.roleuser.dto.GetUserAutoOwnRoleResp; +import cn.axzo.tyr.client.model.roleuser.dto.GetUserFeatureResourceIdsResp; import cn.axzo.tyr.client.model.roleuser.dto.IdentityInfo; import cn.axzo.tyr.client.model.roleuser.dto.SuperAminInfoResp; import cn.axzo.tyr.client.model.roleuser.req.*; @@ -26,7 +27,6 @@ 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; @@ -538,6 +538,32 @@ public class RoleUserService implements SaasRoleUserService { .build(); } + @Override + public GetUserFeatureResourceIdsResp getUserFeatureResourceIds(GetUserFeatureResourceIdsReq req) { + // 查询用户所有角色 + List existsRoleUser = roleUserRelationDao.queryByPersonId(req.getPersonId(), req.getWorkspaceId(), req.getOuId()); + if (CollectionUtils.isEmpty(existsRoleUser)) { + return null; + } + List roles = saasRoleDao.listByIds(existsRoleUser.stream().mapToLong(SaasRoleUserRelation::getRoleId).boxed().collect(Collectors.toList())) + .stream().filter(e -> CollectionUtils.isEmpty(req.getRoleIds()) || req.getRoleIds().contains(e.getId())).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(roles)) { + return null; + } + + List saasPgroupRoleRelations = saasPgroupRoleRelationDao.findByRoleIds(roles.stream().map(BaseEntity::getId).collect(Collectors.toSet())); + if (CollectionUtils.isEmpty(saasPgroupRoleRelations)) { + return null; + } + + List saasPgroupPermissionRelations = saasPgroupPermissionRelationDao.lambdaQuery() + .eq(SaasPgroupPermissionRelation::getGroupId, saasPgroupRoleRelations.get(0).getGroupId()) + .eq(SaasPgroupPermissionRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + + return GetUserFeatureResourceIdsResp.builder().featureResourceIds(saasPgroupPermissionRelations.stream() + .map(SaasPgroupPermissionRelation::getFeatureId).collect(Collectors.toSet())).build(); + } + private void batchRemoveByRoleUserInfo(RoleUserInfo roleUserBaseInfo) { roleUserBaseInfo.getRoleUserResourceInfos().forEach(e -> {