Merge remote-tracking branch 'origin/master' into feature/REQ-3282
# Conflicts: # tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java
This commit is contained in:
commit
4181bcfa8e
@ -6,7 +6,6 @@ import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.List;
|
||||
@ -24,6 +23,13 @@ public class BatchPermissionCheckReq {
|
||||
@NotEmpty(message = "workspaceOUPairs不能为空")
|
||||
private List<WorkspaceOUPair> workspaceOUPairs;
|
||||
|
||||
@NotBlank(message = "itemCode不能为空")
|
||||
/**
|
||||
* app端的应用code
|
||||
*/
|
||||
private String itemCode;
|
||||
|
||||
/**
|
||||
* 端:OMS上的菜单分端维护
|
||||
*/
|
||||
private Set<String> terminals;
|
||||
}
|
||||
|
||||
@ -45,6 +45,11 @@ public class CreateDataObjectReq {
|
||||
*/
|
||||
private List<AttributeBO> attrs;
|
||||
|
||||
/**
|
||||
* 是否过滤工程 0否1是
|
||||
*/
|
||||
private Integer isFilterProject;
|
||||
|
||||
/**
|
||||
* 默认规则
|
||||
*/
|
||||
|
||||
@ -55,6 +55,11 @@ public class EditDataObjectReq {
|
||||
@Valid
|
||||
private List<DataObjectRuleBO> dataObjectRuleBOList;
|
||||
|
||||
/**
|
||||
* 是否过滤工程 0否1是
|
||||
*/
|
||||
private Integer isFilterProject;
|
||||
|
||||
/**
|
||||
* 排序 (从小到大)
|
||||
*/
|
||||
|
||||
@ -43,6 +43,9 @@ public class PageSaasFeatureResourceReq implements IPageReq {
|
||||
@CriteriaField(field = "authType", operator = Operator.EQ)
|
||||
private Integer authType;
|
||||
|
||||
@CriteriaField(field = "featureName", operator = Operator.EQ)
|
||||
private String featureName;
|
||||
|
||||
/**
|
||||
* 资源所属端
|
||||
*/
|
||||
|
||||
@ -46,6 +46,11 @@ public class DataObjectRes {
|
||||
*/
|
||||
private List<DataObjectRuleBO> dataObjectRuleBOList;
|
||||
|
||||
/**
|
||||
* 是否过滤工程 0否1是
|
||||
*/
|
||||
private Integer isFilterProject;
|
||||
|
||||
/**
|
||||
* 排序 (从小到大)
|
||||
*/
|
||||
|
||||
@ -65,5 +65,10 @@ public class TerminalConfigRes {
|
||||
* DISABLED,ENABLED
|
||||
*/
|
||||
private String status;
|
||||
|
||||
/**
|
||||
* 是否允许删除
|
||||
*/
|
||||
private Boolean allowDelete;
|
||||
}
|
||||
}
|
||||
|
||||
@ -31,4 +31,9 @@ public class TerminalRes {
|
||||
* 是否允许克隆
|
||||
*/
|
||||
private Boolean allowClone;
|
||||
|
||||
/**
|
||||
* 是否允许删除
|
||||
*/
|
||||
private Boolean allowDelete;
|
||||
}
|
||||
|
||||
@ -28,9 +28,10 @@ public enum BizResultCode implements IResultCode {
|
||||
PAGE_CODE_DUPLICATE("100018", "资源元素code重复,重复的code:{}"),
|
||||
PARAM_ERROR("100019", "参数错误"),
|
||||
FEATURE_NAME_EXIST("100020", "菜单组件名字已经存在:{}"),
|
||||
TERMINAL_EXIST("100021", "新端已经存在:{}"),
|
||||
TERMINAL_CODE_EXIST("100021", "端code已经存在,请修改"),
|
||||
TERMINAL_NOT_FOUND("100022", "原端不存在:{}"),
|
||||
FEATURE_CODE_OVER_LENGTH("100023", "组件code不能超过100个字符:{}");
|
||||
FEATURE_CODE_OVER_LENGTH("100023", "组件code不能超过100个字符:{}"),
|
||||
TERMINAL_NAME_EXIST("100024", "端名字已经存在,请修改");
|
||||
|
||||
|
||||
private String errorCode;
|
||||
|
||||
@ -21,12 +21,14 @@ import cn.axzo.tyr.client.model.res.ProductFeatureResourceResp;
|
||||
import cn.axzo.tyr.client.model.res.TreePermissionResp;
|
||||
import cn.axzo.tyr.server.service.PermissionQueryService;
|
||||
import cn.axzo.tyr.server.service.TyrSaasAuthService;
|
||||
import com.google.common.collect.Lists;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@ -67,6 +69,9 @@ public class PermissionQueryController implements PermissionQueryApi {
|
||||
List<IdentityAuthReq.WorkspaceOuPair> pairs = BeanMapper.copyList(req.getWorkspaceOUPairs(), IdentityAuthReq.WorkspaceOuPair.class);
|
||||
request.setWorkspaceOusPairs(pairs);
|
||||
request.setItemCode(req.getItemCode());
|
||||
request.setTerminal(Optional.ofNullable(req.getTerminals())
|
||||
.map(Lists::newArrayList)
|
||||
.orElse(null));
|
||||
IdentityAuthRes authRes = tyrSaasAuthService.findIdentityAuthMix(request);
|
||||
|
||||
return ApiResult.ok(BatchPermissionCheckRes.builder()
|
||||
|
||||
@ -4,6 +4,7 @@ import cn.axzo.basics.common.util.AssertUtil;
|
||||
import cn.axzo.foundation.page.PageResp;
|
||||
import cn.axzo.framework.domain.web.result.ApiPageResult;
|
||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
import cn.axzo.framework.rocketmq.Event;
|
||||
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
|
||||
import cn.axzo.tyr.client.common.enums.RoleTypeEnum;
|
||||
import cn.axzo.tyr.client.feign.TyrSaasRoleUserApi;
|
||||
@ -22,32 +23,14 @@ import cn.axzo.tyr.client.model.roleuser.req.GantOrUnGantaWorkerLeaderRoleReq;
|
||||
import cn.axzo.tyr.client.model.roleuser.req.GetUserAutoOwnRoleReq;
|
||||
import cn.axzo.tyr.client.model.roleuser.req.GetUserFeatureResourceIdsReq;
|
||||
import cn.axzo.tyr.client.model.roleuser.req.ListRoleUserRelationParam;
|
||||
import cn.axzo.tyr.client.model.roleuser.req.PageRoleUserRelationParam;
|
||||
import cn.axzo.tyr.client.model.roleuser.req.PageRoleUserRelationReq;
|
||||
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 cn.axzo.tyr.client.model.roleuser.req.WorkerManagerRoleUserReq;
|
||||
import cn.axzo.tyr.client.model.roleuser.req.AutoOwnRoleUserReq;
|
||||
import cn.axzo.tyr.client.model.roleuser.req.CreateSuperAdminRoleParam;
|
||||
import cn.axzo.tyr.client.model.roleuser.req.GantOrUnGantaWorkerLeaderRoleReq;
|
||||
import cn.axzo.tyr.client.model.roleuser.req.GetUserAutoOwnRoleReq;
|
||||
import cn.axzo.tyr.client.model.roleuser.req.GetUserFeatureResourceIdsReq;
|
||||
import cn.axzo.tyr.client.model.roleuser.req.ListRoleUserRelationParam;
|
||||
import cn.axzo.tyr.client.model.roleuser.req.PageRoleUserRelationParam;
|
||||
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 cn.axzo.tyr.client.model.roleuser.req.WorkerManagerRoleUserReq;
|
||||
import cn.axzo.tyr.client.model.roleuser.req.AutoOwnRoleUserReq;
|
||||
import cn.axzo.tyr.client.model.roleuser.req.CreateSuperAdminRoleParam;
|
||||
import cn.axzo.tyr.client.model.roleuser.req.GantOrUnGantaWorkerLeaderRoleReq;
|
||||
import cn.axzo.tyr.client.model.roleuser.req.GetUserAutoOwnRoleReq;
|
||||
import cn.axzo.tyr.client.model.roleuser.req.GetUserFeatureResourceIdsReq;
|
||||
import cn.axzo.tyr.client.model.roleuser.req.ListRoleUserRelationParam;
|
||||
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 cn.axzo.tyr.client.model.roleuser.req.WorkerManagerRoleUserReq;
|
||||
import cn.axzo.tyr.server.config.MqProducer;
|
||||
import cn.axzo.tyr.server.event.payload.SaasRoleUserRelationRemovePayload;
|
||||
import cn.axzo.tyr.server.model.PermissionCacheKey;
|
||||
import cn.axzo.tyr.server.repository.dao.SaasRoleUserRelationDao;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation;
|
||||
@ -55,11 +38,10 @@ import cn.axzo.tyr.server.repository.mapper.SaasRoleUserRelationMapper;
|
||||
import cn.axzo.tyr.server.service.PermissionCacheService;
|
||||
import cn.axzo.tyr.server.service.SaasRoleUserRelationService;
|
||||
import cn.axzo.tyr.server.service.SaasRoleUserService;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.google.common.collect.Lists;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Sets;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -72,12 +54,12 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
import javax.validation.Valid;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.axzo.tyr.server.event.inner.EventTypeEnum.SAAS_ROLE_USER_RELATION_REMOVED;
|
||||
|
||||
/**
|
||||
* @author tanjie@axzo.cn
|
||||
* @date 2023/9/13 15:47
|
||||
@ -91,6 +73,8 @@ public class RoleUserController implements TyrSaasRoleUserApi {
|
||||
private final SaasRoleUserRelationDao saasRoleUserRelationDao;
|
||||
private final PermissionCacheService permissionCacheService;
|
||||
private final SaasRoleUserRelationMapper saasRoleUserRelationMapper;
|
||||
private final MqProducer mqProducer;
|
||||
private static final String TARGET_TYPE = "saasRoleUserRelationId";
|
||||
|
||||
@Override
|
||||
public ApiResult<Void> saveOrUpdate(@Valid RoleUserReq req) {
|
||||
@ -245,6 +229,15 @@ public class RoleUserController implements TyrSaasRoleUserApi {
|
||||
.identityType(IdentityType.getIdentityType(relation.getIdentityType()))
|
||||
.build());
|
||||
}
|
||||
|
||||
Event event = Event.builder()
|
||||
.targetType(TARGET_TYPE)
|
||||
.eventCode(SAAS_ROLE_USER_RELATION_REMOVED.getEventCode())
|
||||
.data(SaasRoleUserRelationRemovePayload.builder()
|
||||
.values(relations)
|
||||
.build())
|
||||
.build();
|
||||
mqProducer.send(event);
|
||||
return ApiResult.ok();
|
||||
}
|
||||
|
||||
|
||||
@ -2,6 +2,7 @@ package cn.axzo.tyr.server.controller.terminal;
|
||||
|
||||
import cn.axzo.foundation.dao.support.mysql.MybatisPlusOperatorProcessor;
|
||||
import cn.axzo.foundation.dao.support.wrapper.Operator;
|
||||
import cn.axzo.foundation.exception.Axssert;
|
||||
import cn.axzo.framework.auth.domain.TerminalInfo;
|
||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
import cn.axzo.tyr.client.common.enums.FeatureResourceType;
|
||||
@ -22,7 +23,6 @@ import cn.axzo.tyr.client.model.res.TerminalRes;
|
||||
import cn.axzo.tyr.server.service.SaasFeatureResourceService;
|
||||
import cn.axzo.tyr.server.service.TerminalService;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.google.common.collect.Lists;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
@ -37,6 +37,7 @@ import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.axzo.tyr.client.model.res.SaasFeatureResourceResp.ROOT_PARENT_ID;
|
||||
import static cn.axzo.tyr.server.config.exception.BizResultCode.TERMINAL_NAME_EXIST;
|
||||
|
||||
@Slf4j
|
||||
@RestController
|
||||
@ -111,15 +112,28 @@ public class TerminalController implements TerminalApi {
|
||||
.allowClone(Optional.ofNullable(terminalBizType)
|
||||
.map(TerminalConfigRes.TerminalBizType::getAllowClone)
|
||||
.orElse(false))
|
||||
.allowDelete(Optional.ofNullable(terminalBizType)
|
||||
.map(TerminalConfigRes.TerminalBizType::getAllowDelete)
|
||||
.orElse(false))
|
||||
.featureType(e.getFeatureType())
|
||||
.build();
|
||||
})
|
||||
.collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
private void checkTerminalName(CreateTerminalReq req) {
|
||||
List<SaasFeatureResourceResp> newFeatureResources = featureResourceService.list(PageSaasFeatureResourceReq.builder()
|
||||
.featureResourceTypes(Lists.newArrayList(FeatureResourceType.ROOT.getCode()))
|
||||
.featureName(req.getName())
|
||||
.build());
|
||||
Axssert.check(CollectionUtils.isEmpty(newFeatureResources), TERMINAL_NAME_EXIST);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<Long> create(CreateTerminalReq req) {
|
||||
|
||||
checkTerminalName(req);
|
||||
|
||||
FeatureResourceTreeSaveReq featureResourceTreeSaveReq = FeatureResourceTreeSaveReq.builder()
|
||||
.parentId(ROOT_PARENT_ID)
|
||||
.featureName(req.getName())
|
||||
|
||||
@ -12,6 +12,7 @@ public enum EventTypeEnum {
|
||||
SAAS_FEATURE_RESOURCE_UPSERT("saas-feature-resource", "saas-feature-resource-upsert", "新菜单树更新"),
|
||||
PAGE_ELEMENT_FEATURE_RESOURCE_UPSERT("page-element-feature-resource", "page-element-feature-resource-upsert", "菜单-页面元素绑定关系更新"),
|
||||
SAAS_ROLE_USER_RELATION_REMOVED("saas-role-user-relation", "saas-role-user-relation-removed", "删除用户角色信息"),
|
||||
SAAS_ROLE_USER_RELATION_UPSERT("saas-role-user-relation", "saas-role-user-relation-upsert", "更新用户角色信息"),
|
||||
;
|
||||
|
||||
EventTypeEnum(String model, String name, String desc) {
|
||||
|
||||
@ -0,0 +1,30 @@
|
||||
package cn.axzo.tyr.server.event.payload;
|
||||
|
||||
import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserV2DTO;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class SaasRoleUserRelationUpsertPayload implements Serializable {
|
||||
|
||||
private List<SaasRoleUserRelation> oldValues;
|
||||
|
||||
private List<SaasRoleUserRelation> newValues;
|
||||
|
||||
public static SaasRoleUserRelation from(SaasRoleUserV2DTO saasRoleUserV2DTO) {
|
||||
SaasRoleUserRelation result = new SaasRoleUserRelation();
|
||||
BeanUtils.copyProperties(saasRoleUserV2DTO, result);
|
||||
result.setNaturalPersonId(saasRoleUserV2DTO.getSaasRoleUser().getPersonId());
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@ -36,4 +36,9 @@ public class DataObject extends BaseOperatorEntity<DataObject> implements Serial
|
||||
private Integer tenantScope;
|
||||
|
||||
private Integer sort;
|
||||
|
||||
/**
|
||||
* 是否过滤工程
|
||||
*/
|
||||
private Integer isFilterProject;
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ import cn.axzo.basics.common.constant.enums.DeleteEnum;
|
||||
import cn.axzo.basics.common.exception.ServiceException;
|
||||
import cn.axzo.basics.common.page.PageResult;
|
||||
import cn.axzo.tyr.client.common.enums.ReturnCodeEnum;
|
||||
import cn.axzo.tyr.client.common.enums.TenantScopeEnum;
|
||||
import cn.axzo.tyr.client.common.enums.YesNoEnum;
|
||||
import cn.axzo.tyr.client.model.data.object.AttributeBO;
|
||||
import cn.axzo.tyr.client.model.data.object.AttributePermissionBO;
|
||||
@ -33,6 +34,7 @@ import cn.axzo.tyr.server.repository.entity.DataObjectRuleScope;
|
||||
import cn.axzo.tyr.server.service.DataObjectService;
|
||||
import cn.axzo.tyr.server.utils.mapper.DataObjectMapper;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.EnumUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.google.common.collect.Lists;
|
||||
@ -84,6 +86,12 @@ public class DataObjectServiceImpl implements DataObjectService {
|
||||
|
||||
// 准备
|
||||
DataObject dataObject = DataObjectMapper.INSTANCE.createReq2DataObject(req);
|
||||
|
||||
// 如果租户类型为非项目租户, 则是否过滤工程字段设置为0
|
||||
if (!TenantScopeEnum.WORKSPACE.getValue().equals(dataObject.getTenantScope()) ) {
|
||||
dataObject.setIsFilterProject(0);
|
||||
}
|
||||
|
||||
dataObject.setCreateBy(req.getCreateBy());
|
||||
List<DataObjectAttr> objectAttrList = DataObjectMapper.INSTANCE.attributeBOs2DataObjectAttrs(req.getAttrs());
|
||||
|
||||
@ -195,7 +203,12 @@ public class DataObjectServiceImpl implements DataObjectService {
|
||||
dataObject.setTenantScope(req.getTenantScope());
|
||||
dataObject.setSort(req.getSort());
|
||||
dataObject.setUpdateBy(req.getUpdateBy());
|
||||
|
||||
// 如果租户类型为非项目租户, 则是否过滤工程字段设置为0
|
||||
if (!TenantScopeEnum.WORKSPACE.getValue().equals(dataObject.getTenantScope()) ) {
|
||||
dataObject.setIsFilterProject(0);
|
||||
} else {
|
||||
dataObject.setIsFilterProject(req.getIsFilterProject());
|
||||
}
|
||||
|
||||
List<DataObjectAttr> objectAttrList = DataObjectMapper.INSTANCE.attributeBOs2DataObjectAttrs(req.getAttrs());
|
||||
List<DataObjectRule> defaultDataObjectRules = DataObjectMapper.INSTANCE.defaultRuleBOs2Rules(Lists.newArrayList(req.getDefaultDataObjectRuleBO()));
|
||||
|
||||
@ -404,6 +404,7 @@ public class PermissionQueryServiceImpl implements PermissionQueryService {
|
||||
.versionMax(req.getVersionMax())
|
||||
.parentUniCode(req.getParentUniCode())
|
||||
.status(req.getStatus())
|
||||
.system(req.getSystem())
|
||||
.build();
|
||||
Set<Long> featureIds = listUserPermissionFeatureIds(treePermissionReq);
|
||||
|
||||
|
||||
@ -766,7 +766,7 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
|
||||
saasRole.setIsDisplay(saveOrUpdateRole.getIsDisplay());
|
||||
saasRole.setEnabled(saveOrUpdateRole.getEnabled());
|
||||
saasRole.setName(saveOrUpdateRole.getName());
|
||||
saasRole.setDescription(saasRole.getDescription());
|
||||
saasRole.setDescription(saveOrUpdateRole.getDescription());
|
||||
saasRole.setRoleType(saveOrUpdateRole.getRoleType());
|
||||
saasRole.setWorkspaceId(saveOrUpdateRole.getWorkspaceId());
|
||||
saasRole.setOwnerOuId(saveOrUpdateRole.getOwnerOuId());
|
||||
|
||||
@ -7,6 +7,7 @@ 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.framework.domain.web.result.ApiResult;
|
||||
import cn.axzo.framework.rocketmq.Event;
|
||||
import cn.axzo.maokai.api.client.OrgJobApi;
|
||||
import cn.axzo.maokai.api.client.OrganizationalNodeUserQueryApi;
|
||||
import cn.axzo.maokai.api.vo.request.OrgJobListReq;
|
||||
@ -18,7 +19,6 @@ import cn.axzo.pokonyan.util.KeysUtil;
|
||||
import cn.axzo.tyr.client.common.enums.RoleResourceTypeEnum;
|
||||
import cn.axzo.tyr.client.common.enums.RoleTypeEnum;
|
||||
import cn.axzo.tyr.client.model.BaseWorkspaceModel;
|
||||
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.req.ListRoleReq;
|
||||
@ -39,6 +39,8 @@ import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq;
|
||||
import cn.axzo.tyr.client.model.roleuser.req.SuperAdminParam;
|
||||
import cn.axzo.tyr.client.model.roleuser.req.WorkerManagerRoleUserReq;
|
||||
import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO;
|
||||
import cn.axzo.tyr.server.config.MqProducer;
|
||||
import cn.axzo.tyr.server.event.payload.SaasRoleUserRelationUpsertPayload;
|
||||
import cn.axzo.tyr.server.model.RoleUserInfo;
|
||||
import cn.axzo.tyr.server.repository.dao.RemoveRoleUserByResource;
|
||||
import cn.axzo.tyr.server.repository.dao.SaasPgroupPermissionRelationDao;
|
||||
@ -82,6 +84,9 @@ import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.axzo.tyr.server.event.inner.EventTypeEnum.SAAS_ROLE_USER_RELATION_UPSERT;
|
||||
|
||||
/**
|
||||
* 角色
|
||||
*
|
||||
@ -106,6 +111,8 @@ public class RoleUserService implements SaasRoleUserService {
|
||||
private final WorkspaceConfigApi workspaceConfigApi;
|
||||
private final OrganizationalNodeUserQueryApi organizationalNodeUserQueryApi;
|
||||
private final RoleService roleService;
|
||||
private final MqProducer mqProducer;
|
||||
private static final String TARGET_TYPE = "saasRoleUserRelationId";
|
||||
|
||||
// 单位类型默认角色关系,后面可以座位管理员的逻辑进行迭代
|
||||
@Value("#{${participateUnitDefaultRoleId:{}}}")
|
||||
@ -263,23 +270,41 @@ public class RoleUserService implements SaasRoleUserService {
|
||||
updateRoleIds.addAll(notAdminAndAutoOwnRole);
|
||||
}
|
||||
// 清空所有角色
|
||||
if (CollectionUtil.isEmpty(updateRoleIds)) {
|
||||
return;
|
||||
if (!CollectionUtil.isEmpty(updateRoleIds)) {
|
||||
roleUserRelationDao.saveBatch(updateRoleIds.stream().map(e -> {
|
||||
SaasRoleUserRelation saasRoleUserRelation = new SaasRoleUserRelation();
|
||||
saasRoleUserRelation.setIdentityId(req.getIdentityId());
|
||||
saasRoleUserRelation.setIdentityType(req.getIdentityType().getCode());
|
||||
saasRoleUserRelation.setRoleId(e);
|
||||
saasRoleUserRelation.setNaturalPersonId(req.getPersonId());
|
||||
saasRoleUserRelation.setOuId(req.getOuId());
|
||||
saasRoleUserRelation.setWorkspaceId(req.getWorkspaceId());
|
||||
saasRoleUserRelation.setCreateBy(req.getOperator());
|
||||
saasRoleUserRelation.setUpdateBy(req.getOperator());
|
||||
return saasRoleUserRelation;
|
||||
}).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
roleUserRelationDao.saveBatch(updateRoleIds.stream().map(e -> {
|
||||
SaasRoleUserRelation saasRoleUserRelation = new SaasRoleUserRelation();
|
||||
saasRoleUserRelation.setIdentityId(req.getIdentityId());
|
||||
saasRoleUserRelation.setIdentityType(req.getIdentityType().getCode());
|
||||
saasRoleUserRelation.setRoleId(e);
|
||||
saasRoleUserRelation.setNaturalPersonId(req.getPersonId());
|
||||
saasRoleUserRelation.setOuId(req.getOuId());
|
||||
saasRoleUserRelation.setWorkspaceId(req.getWorkspaceId());
|
||||
saasRoleUserRelation.setCreateBy(req.getOperator());
|
||||
saasRoleUserRelation.setUpdateBy(req.getOperator());
|
||||
return saasRoleUserRelation;
|
||||
}).collect(Collectors.toList()));
|
||||
|
||||
List<SaasRoleUserV2DTO> newSaasRoleUsers = saasRoleUserRelationService.listV2(ListRoleUserRelationParam.builder()
|
||||
.identityId(req.getIdentityId())
|
||||
.identityType(req.getIdentityType())
|
||||
.workspaceId(req.getWorkspaceId())
|
||||
.ouId(req.getOuId())
|
||||
.build());
|
||||
Event event = Event.builder()
|
||||
.targetType(TARGET_TYPE)
|
||||
.eventCode(SAAS_ROLE_USER_RELATION_UPSERT.getEventCode())
|
||||
.data(SaasRoleUserRelationUpsertPayload.builder()
|
||||
.oldValues(saasRoleUsers.stream()
|
||||
.map(SaasRoleUserRelationUpsertPayload::from)
|
||||
.collect(Collectors.toList()))
|
||||
.newValues(newSaasRoleUsers.stream()
|
||||
.map(SaasRoleUserRelationUpsertPayload::from)
|
||||
.collect(Collectors.toList()))
|
||||
.build())
|
||||
.build();
|
||||
mqProducer.send(event);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -298,6 +323,13 @@ public class RoleUserService implements SaasRoleUserService {
|
||||
|
||||
AssertUtil.notNull(superAdmin, "超管角色不存在,请联系业务初始化超管角色");
|
||||
|
||||
List<SaasRoleUserRelation> oldValues = roleUserRelationDao.lambdaQuery()
|
||||
.eq(SaasRoleUserRelation::getIdentityId, param.getIdentityId())
|
||||
.eq(SaasRoleUserRelation::getIdentityType, param.getIdentityType().getCode())
|
||||
.eq(SaasRoleUserRelation::getNaturalPersonId, param.getNaturalPersonId())
|
||||
.eq(SaasRoleUserRelation::getOuId, param.getOuId())
|
||||
.eq(SaasRoleUserRelation::getWorkspaceId, param.getWorkspaceId())
|
||||
.list();
|
||||
//删除当前超管角色
|
||||
removeOldSuperAdmin(superAdmin.getId(), param.getWorkspaceId(), param.getOuId());
|
||||
|
||||
@ -310,6 +342,22 @@ public class RoleUserService implements SaasRoleUserService {
|
||||
saasRoleUserRelation.setOuId(param.getOuId());
|
||||
saasRoleUserRelation.setWorkspaceId(param.getWorkspaceId());
|
||||
roleUserRelationDao.save(saasRoleUserRelation);
|
||||
|
||||
Event event = Event.builder()
|
||||
.targetType(TARGET_TYPE)
|
||||
.eventCode(SAAS_ROLE_USER_RELATION_UPSERT.getEventCode())
|
||||
.data(SaasRoleUserRelationUpsertPayload.builder()
|
||||
.oldValues(oldValues)
|
||||
.newValues(roleUserRelationDao.lambdaQuery()
|
||||
.eq(SaasRoleUserRelation::getIdentityId, param.getIdentityId())
|
||||
.eq(SaasRoleUserRelation::getIdentityType, param.getIdentityType().getCode())
|
||||
.eq(SaasRoleUserRelation::getNaturalPersonId, param.getNaturalPersonId())
|
||||
.eq(SaasRoleUserRelation::getOuId, param.getOuId())
|
||||
.eq(SaasRoleUserRelation::getWorkspaceId, param.getWorkspaceId())
|
||||
.list())
|
||||
.build())
|
||||
.build();
|
||||
mqProducer.send(event);
|
||||
}
|
||||
|
||||
private void removeOldSuperAdmin(Long id, Long workspaceId, Long ouId) {
|
||||
|
||||
@ -96,7 +96,8 @@ import static cn.axzo.tyr.server.config.exception.BizResultCode.FEATURE_CODE_EXI
|
||||
import static cn.axzo.tyr.server.config.exception.BizResultCode.FEATURE_CODE_OVER_LENGTH;
|
||||
import static cn.axzo.tyr.server.config.exception.BizResultCode.FEATURE_NAME_EXIST;
|
||||
import static cn.axzo.tyr.server.config.exception.BizResultCode.FEATURE_RESOURCE_NOT_FOUND;
|
||||
import static cn.axzo.tyr.server.config.exception.BizResultCode.TERMINAL_EXIST;
|
||||
import static cn.axzo.tyr.server.config.exception.BizResultCode.TERMINAL_CODE_EXIST;
|
||||
import static cn.axzo.tyr.server.config.exception.BizResultCode.TERMINAL_NAME_EXIST;
|
||||
import static cn.axzo.tyr.server.config.exception.BizResultCode.TERMINAL_NOT_FOUND;
|
||||
import static cn.axzo.tyr.server.event.inner.EventTypeEnum.SAAS_FEATURE_RESOURCE_UPSERT;
|
||||
import static cn.axzo.tyr.server.repository.entity.SaasFeatureResource.DEFAULT_WORKSPACE_TYPE;
|
||||
@ -1187,16 +1188,7 @@ public class SaasFeatureResourceServiceImpl extends ServiceImpl<SaasFeatureResou
|
||||
@CacheEvict(value = SaasFeatureResourceCacheService.CACHE_FEATURE_RESOURCE_TREE,allEntries = true)
|
||||
public void clone(CloneTerminalReq req) {
|
||||
|
||||
List<SaasFeatureResourceResp> newFeatureResources = this.list(PageSaasFeatureResourceReq.builder()
|
||||
.featureResourceTypes(Lists.newArrayList(FeatureResourceType.ROOT.getCode()))
|
||||
.terminal(req.getNewTerminalCode())
|
||||
.build());
|
||||
Axssert.check(CollectionUtils.isEmpty(newFeatureResources), TERMINAL_EXIST, TERMINAL_EXIST.getErrorMessage(), req.getNewTerminalCode());
|
||||
|
||||
List<SaasFeatureResourceResp> fromTerminalFeatureResources = this.list(PageSaasFeatureResourceReq.builder()
|
||||
.ids(Lists.newArrayList(req.getFromTerminalId()))
|
||||
.build());
|
||||
Axssert.checkNotEmpty(fromTerminalFeatureResources, TERMINAL_NOT_FOUND, TERMINAL_NOT_FOUND.getErrorMessage(), req.getFromTerminalId());
|
||||
check(req);
|
||||
|
||||
PageSaasFeatureResourceReq pageSaasFeatureResourceReq = PageSaasFeatureResourceReq.builder()
|
||||
.parentId(req.getFromTerminalId())
|
||||
@ -1334,4 +1326,36 @@ public class SaasFeatureResourceServiceImpl extends ServiceImpl<SaasFeatureResou
|
||||
Axssert.check(100 > newCode.length(), FEATURE_CODE_OVER_LENGTH, FEATURE_CODE_OVER_LENGTH.getErrorMessage(), newCode);
|
||||
return newCode;
|
||||
}
|
||||
|
||||
private void check(CloneTerminalReq req) {
|
||||
|
||||
checkTerminalCode(req);
|
||||
|
||||
checkTerminalName(req);
|
||||
|
||||
checkFromTerminal(req);
|
||||
}
|
||||
|
||||
private void checkFromTerminal(CloneTerminalReq req) {
|
||||
List<SaasFeatureResourceResp> fromTerminalFeatureResources = this.list(PageSaasFeatureResourceReq.builder()
|
||||
.ids(Lists.newArrayList(req.getFromTerminalId()))
|
||||
.build());
|
||||
Axssert.checkNotEmpty(fromTerminalFeatureResources, TERMINAL_NOT_FOUND, TERMINAL_NOT_FOUND.getErrorMessage(), req.getFromTerminalId());
|
||||
}
|
||||
|
||||
private void checkTerminalName(CloneTerminalReq req) {
|
||||
List<SaasFeatureResourceResp> newFeatureResources = this.list(PageSaasFeatureResourceReq.builder()
|
||||
.featureResourceTypes(Lists.newArrayList(FeatureResourceType.ROOT.getCode()))
|
||||
.featureName(req.getNewTerminalName())
|
||||
.build());
|
||||
Axssert.check(CollectionUtils.isEmpty(newFeatureResources), TERMINAL_NAME_EXIST);
|
||||
}
|
||||
|
||||
private void checkTerminalCode(CloneTerminalReq req) {
|
||||
List<SaasFeatureResourceResp> newFeatureResources = this.list(PageSaasFeatureResourceReq.builder()
|
||||
.featureResourceTypes(Lists.newArrayList(FeatureResourceType.ROOT.getCode()))
|
||||
.terminal(req.getNewTerminalCode())
|
||||
.build());
|
||||
Axssert.check(CollectionUtils.isEmpty(newFeatureResources), TERMINAL_CODE_EXIST);
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,15 +4,13 @@ import cn.axzo.foundation.exception.BusinessException;
|
||||
import cn.axzo.tyr.base.BaseTest;
|
||||
import cn.axzo.tyr.base.MysqlDataLoader;
|
||||
import cn.axzo.tyr.client.model.req.CloneTerminalReq;
|
||||
import cn.axzo.tyr.client.model.req.SaveOrUpdatePageElementReq;
|
||||
import cn.axzo.tyr.server.service.SaasFeatureResourceService;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import static cn.axzo.tyr.server.config.exception.BizResultCode.PAGE_ELEMENT_ERROR;
|
||||
import static cn.axzo.tyr.server.config.exception.BizResultCode.TERMINAL_EXIST;
|
||||
import static cn.axzo.tyr.server.config.exception.BizResultCode.TERMINAL_CODE_EXIST;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
@ -45,7 +43,7 @@ class SaasFeatureResourceServiceImplTest extends BaseTest {
|
||||
.build();
|
||||
saasFeatureResourceService.clone(req);
|
||||
});
|
||||
assertEquals(businessException.getErrorCode(), TERMINAL_EXIST.getErrorCode());
|
||||
assertEquals(businessException.getErrorCode(), TERMINAL_CODE_EXIST.getErrorCode());
|
||||
assertEquals(businessException.getErrorMsg(), "新端已经存在:[3434]");
|
||||
}
|
||||
}
|
||||
@ -1,10 +1,13 @@
|
||||
package cn.axzo.tyr.server.service.impl;
|
||||
|
||||
import cn.axzo.foundation.exception.BusinessException;
|
||||
import cn.axzo.foundation.page.PageResp;
|
||||
import cn.axzo.tyr.base.BaseTest;
|
||||
import cn.axzo.tyr.base.MysqlDataLoader;
|
||||
import cn.axzo.tyr.client.common.enums.RoleTypeEnum;
|
||||
import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserV2DTO;
|
||||
import cn.axzo.tyr.client.model.roleuser.req.ListRoleUserRelationParam;
|
||||
import cn.axzo.tyr.client.model.roleuser.req.PageRoleUserRelationParam;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation;
|
||||
import cn.axzo.tyr.server.service.SaasRoleUserRelationService;
|
||||
import com.google.common.collect.Lists;
|
||||
@ -56,4 +59,63 @@ class SaasRoleUserRelationServiceImplTest extends BaseTest {
|
||||
.build());
|
||||
Assertions.assertEquals(saasRoleUserRelationService.listV2(ListRoleUserRelationParam.builder().build()).size(), 2);
|
||||
}
|
||||
|
||||
@Test
|
||||
void list() {
|
||||
|
||||
ListRoleUserRelationParam list = ListRoleUserRelationParam.builder()
|
||||
.roleCodes(Sets.newHashSet("cms:mafb_business_vice_officer"))
|
||||
.build();
|
||||
List<SaasRoleUserV2DTO> result = saasRoleUserRelationService.listV2(list);
|
||||
Assertions.assertEquals(result.size(), 1);
|
||||
|
||||
|
||||
list = ListRoleUserRelationParam.builder()
|
||||
.roleCodes(Sets.newHashSet("cms:mafb_business_vice_officer1"))
|
||||
.build();
|
||||
result = saasRoleUserRelationService.listV2(list);
|
||||
Assertions.assertEquals(result.size(), 0);
|
||||
|
||||
list = ListRoleUserRelationParam.builder()
|
||||
.roleCodes(Sets.newHashSet("cms:mafb_business_vice_officer", "cms:mafb_productivity_vice_officer"))
|
||||
.build();
|
||||
result = saasRoleUserRelationService.listV2(list);
|
||||
Assertions.assertEquals(result.size(), 2);
|
||||
|
||||
list = ListRoleUserRelationParam.builder()
|
||||
.roleTypes(Sets.newHashSet(RoleTypeEnum.ADMIN))
|
||||
.build();
|
||||
result = saasRoleUserRelationService.listV2(list);
|
||||
Assertions.assertEquals(result.size(), 1);
|
||||
|
||||
list = ListRoleUserRelationParam.builder()
|
||||
.roleTypes(Sets.newHashSet(RoleTypeEnum.SUPER_ADMIN))
|
||||
.build();
|
||||
result = saasRoleUserRelationService.listV2(list);
|
||||
Assertions.assertEquals(result.size(), 1);
|
||||
|
||||
list = ListRoleUserRelationParam.builder()
|
||||
.roleTypes(Sets.newHashSet(RoleTypeEnum.ADMIN, RoleTypeEnum.SUPER_ADMIN))
|
||||
.build();
|
||||
result = saasRoleUserRelationService.listV2(list);
|
||||
Assertions.assertEquals(result.size(), 2);
|
||||
|
||||
list = ListRoleUserRelationParam.builder()
|
||||
.roleTypes(Sets.newHashSet(RoleTypeEnum.ADMIN, RoleTypeEnum.SUPER_ADMIN))
|
||||
.roleCodes(Sets.newHashSet("sdfdsf"))
|
||||
.build();
|
||||
result = saasRoleUserRelationService.listV2(list);
|
||||
Assertions.assertEquals(result.size(), 0);
|
||||
|
||||
list = ListRoleUserRelationParam.builder()
|
||||
.roleTypes(Sets.newHashSet(RoleTypeEnum.ADMIN, RoleTypeEnum.SUPER_ADMIN))
|
||||
.roleCodes(Sets.newHashSet("oms:project_manager"))
|
||||
.workspaceOuPairs(Lists.newArrayList(ListRoleUserRelationParam.WorkspaceOuPair.builder()
|
||||
.workspaceId(8L)
|
||||
.ouId(1L)
|
||||
.build()))
|
||||
.build();
|
||||
result = saasRoleUserRelationService.listV2(list);
|
||||
Assertions.assertEquals(result.size(), 1);
|
||||
}
|
||||
}
|
||||
@ -5,4 +5,14 @@ INSERT INTO saas_role_user_relation (id, identity_id, role_id, identity_type, na
|
||||
INSERT INTO saas_role_user_relation (id, identity_id, role_id, identity_type, natural_person_id, workspace_id, ou_id, resource_type, resource_id, is_delete, create_at, update_at, create_by, update_by, job_type) VALUES (16401, 98, 3417, 3, 2020, 6, 1, 0, 0, 0, '2021-09-16 22:09:29', '2021-09-16 22:09:29', 0, 0, 2);
|
||||
INSERT INTO saas_role_user_relation (id, identity_id, role_id, identity_type, natural_person_id, workspace_id, ou_id, resource_type, resource_id, is_delete, create_at, update_at, create_by, update_by, job_type) VALUES (16402, 106, 3418, 3, 3577, 12, 1, 0, 0, 0, '2021-09-16 22:09:29', '2021-09-16 22:09:29', 0, 0, 2);
|
||||
|
||||
|
||||
INSERT INTO saas_role (id, NAME, description, role_type, role_code, workspace_id, owner_ou_id, product_unit_type, workspace_type, is_delete, create_at, update_at, create_by, update_by, fit_ou_type_bit, fit_ou_node_type_bit, position_template_id, project_team_manage_role_resource_id, from_pre_role_id, job_code, is_display, sort, enabled)
|
||||
VALUES (3415, '项目经理', '', 'super_admin', 'oms:project_manager', -1, -1, 6, 6, 0, '2023-09-19 15:22:55', '2024-08-13 10:25:25', 2003043, 2003028, 1, 65535, 0, null, 0, '', 1, 2, 1);
|
||||
INSERT INTO saas_role (id, NAME, description, role_type, role_code, workspace_id, owner_ou_id, product_unit_type, workspace_type, is_delete, create_at, update_at, create_by, update_by, fit_ou_type_bit, fit_ou_node_type_bit, position_template_id, project_team_manage_role_resource_id, from_pre_role_id, job_code, is_display, sort, enabled)
|
||||
VALUES (3416, '项目负责人', '', 'admin', 'cms:mafb_project_commissioner', -1, -1, 5, 2, 0, '2023-10-23 17:49:59', '2024-08-13 10:25:40', -1, 9000399985, 1, 65535, 0, null, 0, '', 1, 1, 1);
|
||||
INSERT INTO saas_role (id, NAME, description, role_type, role_code, workspace_id, owner_ou_id, product_unit_type, workspace_type, is_delete, create_at, update_at, create_by, update_by, fit_ou_type_bit, fit_ou_node_type_bit, position_template_id, project_team_manage_role_resource_id, from_pre_role_id, job_code, is_display, sort, enabled)
|
||||
VALUES (3417, '商务副经理', '', 'init', 'cms:mafb_business_vice_officer', -1, -1, 5, 2, 0, '2023-10-23 17:50:00', '2024-08-13 10:25:41', -1, 2006333, 1, 65535, 0, null, 0, '', 1, 2, 1);
|
||||
INSERT INTO saas_role (id, NAME, description, role_type, role_code, workspace_id, owner_ou_id, product_unit_type, workspace_type, is_delete, create_at, update_at, create_by, update_by, fit_ou_type_bit, fit_ou_node_type_bit, position_template_id, project_team_manage_role_resource_id, from_pre_role_id, job_code, is_display, sort, enabled)
|
||||
VALUES (3418, '生产副经理', '', 'init', 'cms:mafb_productivity_vice_officer', -1, -1, 5, 2, 0, '2023-10-23 17:50:00', '2024-08-13 10:25:41', -1, 2006333, 1, 65535, 0, null, 0, '', 1, 3, 1);
|
||||
|
||||
#-->SaasRoleUserRelationServiceImplTest.sql
|
||||
Loading…
Reference in New Issue
Block a user