创建超级管理员角色

This commit is contained in:
张弘昊 2023-10-18 14:47:00 +08:00
parent 31958870c9
commit 692a0a0e66
6 changed files with 104 additions and 19 deletions

View File

@ -61,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 CreateSuperAminRoleParam param);
/**
* 移除超管角色

View File

@ -1,14 +1,13 @@
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 CreateSuperAminRoleParam {
/**
* 工作台id与context校验
@ -23,15 +22,19 @@ public class CreateWorkspaceAdminRoleParam {
private Long ouId;
/**
* 手机号
* 适用单位类型 1:总包 2:建设单位 4:监理单位 8:劳务分包 16:专业分包 0都可以用 只会挂在最末级
* <p>
* 业务层这个字段不要直接用有变种的gettersetter或者直接用解释工具
*/
@NotBlank(message = "phone不能为空")
private String phone;
private Long fitOuTypeBit;
/**
* 昵称
*
* 适用节点类型 1:部门 2:班组 4:小组 只会挂在最末级
*
* 业务层这个字段不要直接用
*/
private String nickName;
private Long fitOuNodeTypeBit;
/**
* 角色Id必填
@ -39,6 +42,12 @@ public class CreateWorkspaceAdminRoleParam {
*/
private RoleTypeEnum roleType;
/**
* 身份id
*/
@NotNull(message = "identityId不能为空")
private Long identityId;
/**
* 身份类型
*/
@ -48,4 +57,6 @@ public class CreateWorkspaceAdminRoleParam {
@NotNull(message = "workspaceType不能为空")
private Integer workspaceType;
private Long naturalPersonId;
}

View File

@ -8,7 +8,6 @@ import cn.axzo.tyr.client.model.roleuser.dto.SuperAdminInfoDTO;
import cn.axzo.tyr.client.model.roleuser.req.*;
import cn.axzo.tyr.server.service.SaasRoleUserRelationService;
import cn.axzo.tyr.server.service.SaasRoleUserService;
import com.google.common.collect.Lists;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestBody;
@ -63,9 +62,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(CreateSuperAminRoleParam param) {
saasRoleUserService.createSuperAdminRole(param);
return ApiResult.ok();
}
@Override

View File

@ -2,10 +2,13 @@ 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 cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Repository;
@ -53,5 +56,30 @@ 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();
}
}

View File

@ -1,10 +1,8 @@
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.RoleUserParam;
import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq;
import cn.axzo.tyr.client.model.roleuser.dto.CreateAdminRoleDTO;
import cn.axzo.tyr.client.model.roleuser.req.*;
import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation;
import java.util.List;
@ -60,4 +58,10 @@ public interface SaasRoleUserService {
* @return
*/
List<SaasRoleUserRelation> queryByWorkspaceIdOrOu(Long identityId, IdentityType identityType, Set<Long> workspaceIds, Set<Long> ouIds);
/**
* workpaceId + ownerOuId + roleId + 手机号 + 姓名 赋予角色支持角色赋予的同时 角色创建
* work for: 组织 + 服务包
*/
void createSuperAdminRole(CreateSuperAminRoleParam param);
}

View File

@ -1,10 +1,12 @@
package cn.axzo.tyr.server.service.impl;
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;
import cn.axzo.tyr.client.model.enums.IdentityType;
import cn.axzo.tyr.client.model.roleuser.req.CreateSuperAminRoleParam;
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;
@ -16,6 +18,7 @@ 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;
@ -142,4 +145,44 @@ public class RoleUserService implements SaasRoleUserService {
public List<SaasRoleUserRelation> queryByWorkspaceIdOrOu(Long identityId, IdentityType identityType, Set<Long> workspaceIds, Set<Long> ouIds) {
return roleUserRelationDao.queryByWorkspaceIdOrOu(identityId, identityType, workspaceIds, ouIds);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void createSuperAdminRole(CreateSuperAminRoleParam 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, "已存在相同的角色名称,请更换角色名称");
}
}