Merge remote-tracking branch 'origin/feature/REQ-1502' into feature/REQ-1502

# Conflicts:
#	tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleUserApi.java
#	tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserService.java
This commit is contained in:
yangsong 2023-10-18 17:02:57 +08:00
commit df12ccdd8e
18 changed files with 366 additions and 82 deletions

View File

@ -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<Boolean> updateFeatureRelation(@Validated @RequestBody List<ProductFeatureRelationUpdateReq> req);
/**
* 查询指定工作台关联的服务包下的产品权限点
*
* @param workspaceIds
* @return
*/
@PostMapping("/temp")
ApiResult<Map<Long, List<ProductFeatureRelationVO>>> queryProductFeatureRelationByWorkspace(Set<Long> workspaceIds);
}

View File

@ -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<List<IsSuperAdminRes>> isSuperAdmin(@RequestBody List<QueryByIdentityIdTypeReq> req);
/**
* 通过角色名字获取角色信息
* @return
*/
@PostMapping("/api/saasRole/findRoleByName")
ApiResult<List<SaasRoleVO>> findRoleByName(@RequestBody @Valid QueryRoleByNameReq req);
/** 分页查询角色含用户 **/
@PostMapping("/api/saasRole/queryWithUser")
ApiPageResult<RoleWithUserRes> queryRoleWithUser(@RequestBody RoleWithUserQueryReq req);
}

View File

@ -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<CreateAdminRoleDTO> createAgencyAdminRole(@RequestBody @Valid CreateAgencyAdminRoleParam param);
@PostMapping("/api/saas-role-user/create-workspace-admin-role")
ApiResult<CreateAdminRoleDTO> createWorkspaceAdminRole(@RequestBody @Valid @NotEmpty List<CreateWorkspaceAdminRoleParam> params);
@PostMapping("/api/saas-role-user/create-super-admin-role")
ApiResult<Void> createSuperAdminRole(@RequestBody @Valid @NotEmpty CreateSuperAdminRoleParam param);
/**
* 移除用户权限包含超管一般用于移除超管权限

View File

@ -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;
/**

View File

@ -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<String> roleNames;
}

View File

@ -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;
}

View File

@ -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<UserVO> users;
@Data
public static class UserVO {
/** 身份ID **/
private Long identityId;
/** 身份类型 **/
private Integer identityType;
/** 名称 **/
private String name;
/** 组织节点ID **/
private Long nodeId;
}
}

View File

@ -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_ADMINADMIN
*/
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;
}

View File

@ -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");

View File

@ -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<Map<Long, List<ProductFeatureRelationVO>>> queryProductFeatureRelationByWorkspace(Set<Long> workspaceIds) {
return ApiResult.ok(productFeatureRelationService.getByWorkspace(workspaceIds));
}
}

View File

@ -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<List<SaasRoleVO>> findRoleByName(QueryRoleByNameReq req) {
return ApiResult.ok(roleService.findRoleByName(req));
}
@Override
public ApiPageResult<RoleWithUserRes> queryRoleWithUser(RoleWithUserQueryReq req) {
return ApiPageResult.ok(roleService.queryRoleWithUser(req));
}
}

View File

@ -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<CreateAdminRoleDTO> createWorkspaceAdminRole(List<CreateWorkspaceAdminRoleParam> params) {
// todo cn.axzo.basics.auth.api.SaasRoleApi#grantAdminRoleByPhone
return ApiResult.ok(new CreateAdminRoleDTO());
public ApiResult<Void> createSuperAdminRole(CreateSuperAdminRoleParam param) {
saasRoleUserService.createSuperAdminRole(param);
return ApiResult.ok();
}
@Override

View File

@ -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<SaasRoleMapper, SaasRole> {
}
return this.getBaseMapper().listRoleUserByPermissionGroup(permissionGroupIdList, workspaceIds);
}
public SaasRole findRoleByTypeAndWorkspaceIdAndOuId(String roleType, Long workspaceId,
Long ouId) {
List<SaasRole> 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<SaasRole> 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<SaasRole> findRoleByName(Long ouId, Long workspaceId,
List<String> 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();
}
}

View File

@ -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<Long> filterPermissionPoint(Set<SaasRoleVO> role, TyrSaasAuthServiceImpl.UserRoleInfoMap userRoleInfoMap);
/**
* 通过角色名字获取角色信息
* @param req
* @return
*/
List<SaasRoleVO> findRoleByName(QueryRoleByNameReq req);
/** 分页查询角色含用户 **/
PageResp<RoleWithUserRes> queryRoleWithUser(RoleWithUserQueryReq req);
}

View File

@ -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<SaasRoleUserRelation> queryByWorkspaceIdOrOu(Long identityId, IdentityType identityType, Set<Long> workspaceIds, Set<Long> ouIds);
/**
* workpaceId + ownerOuId + roleId + 手机号 + 姓名 赋予角色支持角色赋予的同时 角色创建
* work for: 组织 + 服务包
*/
void createSuperAdminRole(CreateSuperAdminRoleParam param);
/**
* 批量获取超管信息
* @param param

View File

@ -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<SaasRoleVO> queryByIdentityIdType(Long identityId, Integer identityType, Long workspaceId, Long ouId) {
// 查询人关联的角色id
@ -187,13 +190,13 @@ public class RoleServiceImpl implements RoleService {
}
// 查询角色
List<SaasRole> 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<RoleWithUserRes> queryRoleWithUser(RoleWithUserQueryReq req) {
//按role进行分页查询
Page<SaasRole> rolePage = saasRoleDao
.page(new Page<>(req.getPage(), req.getPageSize()),
new LambdaQueryWrapper<SaasRole>()
.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<Long> roleIds = rolePage.getRecords().stream().map(SaasRole::getId).collect(Collectors.toList());
List<SaasRoleUserRelation> relationList = saasRoleUserRelationDao.list(new LambdaQueryWrapper<SaasRoleUserRelation>().
in(SaasRoleUserRelation::getRoleId, roleIds));
Map<Long, List<SaasRoleUserRelation>> relationMap = relationList.stream().collect(Collectors.groupingBy(SaasRoleUserRelation::getRoleId));
// 结果组装 - 用户信息到yoke组装
List<RoleWithUserRes> 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<SaasRoleUserRelation> relations = relationMap.get(role.getId());
if (CollectionUtil.isNotEmpty(relations)) {
List<RoleWithUserRes.UserVO> 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<SaasRoleVO> findRoleByName(QueryRoleByNameReq req) {
List<SaasRole> roleList = saasRoleDao.findRoleByName(req.getOuId(), req.getWorkspaceId(), req.getRoleNames());
return BeanUtil.copyToList(roleList, SaasRoleVO.class);
}
}

View File

@ -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<SaasRole> saasRoles = saasRoleDao.listCommonRoleByNameAndWorkspaceIdAndOuId(name,
workspaceId, ouId);
AssertUtil.isEmpty(saasRoles, "已存在相同的角色名称,请更换角色名称");
}
@Override
public List<SuperAdminInfoDTO> superAdminList(SuperAdminParam param) {
if (param.getWorkspaceId() == null || CollectionUtil.isEmpty(param.getOuIds())) {

View File

@ -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<RoleWithUserRes> result = controller.queryRoleWithUser(request);
System.out.println(JSON.toJSONString(result));
}
}