feat:(REQ-2720) 重构查询权限和根据权限查询人的逻辑
This commit is contained in:
parent
e7c6dd2f92
commit
3ac9739644
@ -112,6 +112,9 @@ public class IdentityAuthReq {
|
|||||||
/** 基于角色标签查询逻辑不再用该参数 **/
|
/** 基于角色标签查询逻辑不再用该参数 **/
|
||||||
private Integer workspaceJoinType;
|
private Integer workspaceJoinType;
|
||||||
|
|
||||||
|
public String buildOuWorkspaceKey() {
|
||||||
|
return this.getOuId() + "_" + this.getWorkspaceId();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -30,7 +30,7 @@ public class PageElementFeatureResourceRelationReq implements IPageReq {
|
|||||||
List<String> sort;
|
List<String> sort;
|
||||||
|
|
||||||
@CriteriaField(field = "featureResourceUniCode", operator = Operator.IN)
|
@CriteriaField(field = "featureResourceUniCode", operator = Operator.IN)
|
||||||
private List<String> featureResourceUniCodes;
|
private Set<String> featureResourceUniCodes;
|
||||||
|
|
||||||
@CriteriaField(field = "pageElementCode", operator = Operator.IN)
|
@CriteriaField(field = "pageElementCode", operator = Operator.IN)
|
||||||
private Set<String> pageElementCodes;
|
private Set<String> pageElementCodes;
|
||||||
|
|||||||
@ -58,14 +58,9 @@ public class IdentityAuthRes {
|
|||||||
|
|
||||||
private String featureCode;
|
private String featureCode;
|
||||||
|
|
||||||
// private FeatureType featureType;
|
private Integer featureType;
|
||||||
|
|
||||||
private String terminal;
|
private String terminal;
|
||||||
|
|
||||||
/**
|
|
||||||
* 应用范围(租户类型):1:企业工作台 2;项目工作台
|
|
||||||
*/
|
|
||||||
private Long workspaceType;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -52,6 +52,19 @@ public class SaasRoleUserV2DTO {
|
|||||||
*/
|
*/
|
||||||
private Long workspaceId;
|
private Long workspaceId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 身份Id
|
||||||
|
*/
|
||||||
|
private Long identityId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 身份类型 1:工人 2:从业人员 3:班组长 4:运营人员 5:政务人员
|
||||||
|
*/
|
||||||
|
private Integer identityType;
|
||||||
|
|
||||||
|
public String buildOuWorkspaceKey() {
|
||||||
|
return this.getOuId() + "_" + this.getWorkspaceId();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
|||||||
@ -85,6 +85,7 @@ public class TyrSaasAuthController implements TyrSaasAuthApi {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ApiResult<List<ListIdentityFromPermissionResp>> listWorkspacePermissionIdentity(WorkspacePermissionIdentityReq req) {
|
public ApiResult<List<ListIdentityFromPermissionResp>> listWorkspacePermissionIdentity(WorkspacePermissionIdentityReq req) {
|
||||||
|
|
||||||
return ApiResult.ok(tyrSaasAuthService.listWorkspacePermissionIdentity(req));
|
return ApiResult.ok(tyrSaasAuthService.listWorkspacePermissionIdentity(req));
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -8,6 +8,8 @@ public enum EventTypeEnum {
|
|||||||
|
|
||||||
PRODUCT_PERMISSION_CREATED("product-permission", "product-permission-created", "产品权限添加"),
|
PRODUCT_PERMISSION_CREATED("product-permission", "product-permission-created", "产品权限添加"),
|
||||||
ROLE_PERMISSION_CREATED("role-permission", "role-permission-created", "角色权限添加"),
|
ROLE_PERMISSION_CREATED("role-permission", "role-permission-created", "角色权限添加"),
|
||||||
|
SAAS_FEATURE_UPSERT("saas-feature", "saas-feature-upsert", "旧菜单树更新"),
|
||||||
|
SAAS_FEATURE_RESOURCE_UPSERT("saas-feature-resource", "saas-feature-resource-upsert", "新菜单树更新"),
|
||||||
;
|
;
|
||||||
|
|
||||||
EventTypeEnum(String model, String name, String desc) {
|
EventTypeEnum(String model, String name, String desc) {
|
||||||
|
|||||||
@ -0,0 +1,18 @@
|
|||||||
|
package cn.axzo.tyr.server.event.payload;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class SaasFeatureResourceUpsertPayload implements Serializable {
|
||||||
|
|
||||||
|
private Set<Long> ids;
|
||||||
|
}
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
package cn.axzo.tyr.server.event.payload;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class SaasFeatureUpsetPayload implements Serializable {
|
||||||
|
|
||||||
|
private Set<Long> ids;
|
||||||
|
}
|
||||||
@ -4,12 +4,35 @@ import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation;
|
|||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface SaasRoleUserRelationMapper extends BaseMapper<SaasRoleUserRelation> {
|
public interface SaasRoleUserRelationMapper extends BaseMapper<SaasRoleUserRelation> {
|
||||||
|
|
||||||
Page<SaasRoleUserRelation> batListCleanRelation(IPage<SaasRoleUserRelation> page, @Param("param") SaasRoleUserRelation cleanParam);
|
Page<SaasRoleUserRelation> batListCleanRelation(IPage<SaasRoleUserRelation> page, @Param("param") SaasRoleUserRelation cleanParam);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 现在没有数据可以查询项目的角色
|
||||||
|
* 通过权限点找有权限的人,需要这个接口
|
||||||
|
* @param listRole
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Set<Long> listRoleIds(@Param("param") ListRole listRole);
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
class ListRole {
|
||||||
|
private Long ouId;
|
||||||
|
private Long workspaceId;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -183,6 +183,12 @@ public interface RoleService extends IService<SaasRole> {
|
|||||||
*/
|
*/
|
||||||
@CriteriaField(ignore = true)
|
@CriteriaField(ignore = true)
|
||||||
private String terminal;
|
private String terminal;
|
||||||
|
|
||||||
|
@CriteriaField(field = "workspaceId", operator = Operator.EQ)
|
||||||
|
private Long workspaceId;
|
||||||
|
|
||||||
|
@CriteriaField(field = "ownerOuId", operator = Operator.EQ)
|
||||||
|
private Long ouId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuperBuilder
|
@SuperBuilder
|
||||||
|
|||||||
@ -29,6 +29,26 @@ public interface WorkspaceProductService {
|
|||||||
*/
|
*/
|
||||||
void storeWorkspaceProduct(StoreWorkspaceProductParam param);
|
void storeWorkspaceProduct(StoreWorkspaceProductParam param);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从缓存中查询项目的产品及产品的权限
|
||||||
|
* @param param
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<WorkspaceProductPermission> listWorkspaceProductPermissionCached(ListWorkspaceProductPermissionCacheParam param);
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
class ListWorkspaceProductPermissionCacheParam {
|
||||||
|
/**
|
||||||
|
* 项目id
|
||||||
|
*/
|
||||||
|
private Set<Long> workspaceIds;
|
||||||
|
|
||||||
|
private Set<String> featureCodes;
|
||||||
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Builder
|
@Builder
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@ -74,6 +94,31 @@ public interface WorkspaceProductService {
|
|||||||
private List<SaasProductModuleFeatureRelation> saasProductModuleFeatureRelations;
|
private List<SaasProductModuleFeatureRelation> saasProductModuleFeatureRelations;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
class WorkspaceProductPermission {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目id
|
||||||
|
*/
|
||||||
|
private Long workspaceId;
|
||||||
|
|
||||||
|
private List<ProductPermission> productPermissions;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
class ProductPermission {
|
||||||
|
|
||||||
|
private Long productId;
|
||||||
|
|
||||||
|
private List<ProductPermissionCacheService.PermissionDTO> permissions;
|
||||||
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Builder
|
@Builder
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
|
|||||||
@ -19,9 +19,9 @@ import cn.axzo.tyr.client.model.base.FeatureResourceExtraDO;
|
|||||||
import cn.axzo.tyr.client.model.base.WorkspaceOUPair;
|
import cn.axzo.tyr.client.model.base.WorkspaceOUPair;
|
||||||
import cn.axzo.tyr.client.model.enums.IdentityType;
|
import cn.axzo.tyr.client.model.enums.IdentityType;
|
||||||
import cn.axzo.tyr.client.model.product.ProductFeatureRelationVO;
|
import cn.axzo.tyr.client.model.product.ProductFeatureRelationVO;
|
||||||
import cn.axzo.tyr.client.model.req.FeatureIdPair;
|
|
||||||
import cn.axzo.tyr.client.model.req.IdentityAuthReq;
|
import cn.axzo.tyr.client.model.req.IdentityAuthReq;
|
||||||
import cn.axzo.tyr.client.model.req.NavTreeReq;
|
import cn.axzo.tyr.client.model.req.NavTreeReq;
|
||||||
|
import cn.axzo.tyr.client.model.req.PageElementFeatureResourceRelationReq;
|
||||||
import cn.axzo.tyr.client.model.req.PagePermissionReq;
|
import cn.axzo.tyr.client.model.req.PagePermissionReq;
|
||||||
import cn.axzo.tyr.client.model.req.PagePermissionResp;
|
import cn.axzo.tyr.client.model.req.PagePermissionResp;
|
||||||
import cn.axzo.tyr.client.model.req.PageSaasFeatureResourceReq;
|
import cn.axzo.tyr.client.model.req.PageSaasFeatureResourceReq;
|
||||||
@ -46,14 +46,15 @@ import cn.axzo.tyr.server.model.UserIdentity;
|
|||||||
import cn.axzo.tyr.server.model.WorkspaceFeatureRelation;
|
import cn.axzo.tyr.server.model.WorkspaceFeatureRelation;
|
||||||
import cn.axzo.tyr.server.repository.dao.ProductModuleDao;
|
import cn.axzo.tyr.server.repository.dao.ProductModuleDao;
|
||||||
import cn.axzo.tyr.server.repository.dao.SaasFeatureResourceDao;
|
import cn.axzo.tyr.server.repository.dao.SaasFeatureResourceDao;
|
||||||
import cn.axzo.tyr.server.repository.dao.SaasPageElementFeatureResourceRelationDao;
|
|
||||||
import cn.axzo.tyr.server.repository.entity.SaasFeatureResource;
|
import cn.axzo.tyr.server.repository.entity.SaasFeatureResource;
|
||||||
|
import cn.axzo.tyr.server.repository.entity.SaasPageElementFeatureResourceRelation;
|
||||||
import cn.axzo.tyr.server.repository.entity.SaasProductModuleFeatureRelation;
|
import cn.axzo.tyr.server.repository.entity.SaasProductModuleFeatureRelation;
|
||||||
import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation;
|
import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation;
|
||||||
import cn.axzo.tyr.server.service.PermissionQueryService;
|
import cn.axzo.tyr.server.service.PermissionQueryService;
|
||||||
import cn.axzo.tyr.server.service.ProductFeatureRelationService;
|
import cn.axzo.tyr.server.service.ProductFeatureRelationService;
|
||||||
import cn.axzo.tyr.server.service.RoleService;
|
import cn.axzo.tyr.server.service.RoleService;
|
||||||
import cn.axzo.tyr.server.service.SaasFeatureResourceService;
|
import cn.axzo.tyr.server.service.SaasFeatureResourceService;
|
||||||
|
import cn.axzo.tyr.server.service.SaasPageElementFeatureResourceRelationService;
|
||||||
import cn.axzo.tyr.server.service.SaasRoleUserRelationService;
|
import cn.axzo.tyr.server.service.SaasRoleUserRelationService;
|
||||||
import cn.axzo.tyr.server.service.TyrSaasAuthService;
|
import cn.axzo.tyr.server.service.TyrSaasAuthService;
|
||||||
import cn.axzo.tyr.server.service.WorkspaceProductService;
|
import cn.axzo.tyr.server.service.WorkspaceProductService;
|
||||||
@ -91,7 +92,6 @@ import java.util.function.Function;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static cn.axzo.tyr.server.repository.entity.SaasFeatureResource.DISPLAY_STATUS;
|
import static cn.axzo.tyr.server.repository.entity.SaasFeatureResource.DISPLAY_STATUS;
|
||||||
import static cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation.NEW_FEATURE;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 权限查询服务实现
|
* 权限查询服务实现
|
||||||
@ -117,7 +117,7 @@ public class PermissionQueryServiceImpl implements PermissionQueryService {
|
|||||||
private final SaasFeatureResourceService saasFeatureResourceService;
|
private final SaasFeatureResourceService saasFeatureResourceService;
|
||||||
private final SaasRoleUserRelationService saasRoleUserRelationService;
|
private final SaasRoleUserRelationService saasRoleUserRelationService;
|
||||||
private final WorkspaceProductService workspaceProductService;
|
private final WorkspaceProductService workspaceProductService;
|
||||||
private final SaasPageElementFeatureResourceRelationDao saasPageElementFeatureResourceRelationDao;
|
private final SaasPageElementFeatureResourceRelationService saasPageElementFeatureResourceRelationService;
|
||||||
|
|
||||||
@Qualifier("authExecutor")
|
@Qualifier("authExecutor")
|
||||||
@Autowired
|
@Autowired
|
||||||
@ -331,6 +331,8 @@ public class PermissionQueryServiceImpl implements PermissionQueryService {
|
|||||||
Set<Long> defaultFeatureIds = listNotAuthFeatureIds();
|
Set<Long> defaultFeatureIds = listNotAuthFeatureIds();
|
||||||
allFeatureIds.addAll(featureIds);
|
allFeatureIds.addAll(featureIds);
|
||||||
allFeatureIds.addAll(defaultFeatureIds);
|
allFeatureIds.addAll(defaultFeatureIds);
|
||||||
|
|
||||||
|
|
||||||
if (CollectionUtils.isEmpty(allFeatureIds)) {
|
if (CollectionUtils.isEmpty(allFeatureIds)) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
@ -653,26 +655,39 @@ public class PermissionQueryServiceImpl implements PermissionQueryService {
|
|||||||
|
|
||||||
private Set<Long> listUserPermissionFeatureIds(TreePermissionReq treePermissionReq) {
|
private Set<Long> listUserPermissionFeatureIds(TreePermissionReq treePermissionReq) {
|
||||||
|
|
||||||
List<Long> featureIds = resolveFeatureIds(treePermissionReq);
|
Set<String> featureCodes = resolveFeatureCodes(treePermissionReq);
|
||||||
|
|
||||||
if (StringUtils.isNotBlank(treePermissionReq.getUniCode()) && CollectionUtils.isEmpty(featureIds)) {
|
if (StringUtils.isNotBlank(treePermissionReq.getUniCode()) && CollectionUtils.isEmpty(featureCodes)) {
|
||||||
return Collections.emptySet();
|
return Collections.emptySet();
|
||||||
}
|
}
|
||||||
|
|
||||||
List<SaasRoleUserV2DTO> saasRoleUserV2DTOS = listUserPermission(treePermissionReq, featureIds);
|
|
||||||
|
|
||||||
// 用户可能没有角色
|
IdentityAuthReq identityAuthReq = IdentityAuthReq.builder()
|
||||||
if (CollectionUtils.isEmpty(saasRoleUserV2DTOS)) {
|
.personId(treePermissionReq.getPersonId())
|
||||||
return Collections.emptySet();
|
.terminal(Lists.newArrayList(treePermissionReq.getTerminal()))
|
||||||
}
|
.workspaceOusPairs(treePermissionReq.getWorkspaceOUPairs().stream()
|
||||||
|
.map(e -> IdentityAuthReq.WorkspaceOuPair.builder()
|
||||||
|
.ouId(e.getOuId())
|
||||||
|
.workspaceId(e.getWorkspaceId())
|
||||||
|
.build())
|
||||||
|
.collect(Collectors.toList()))
|
||||||
|
.featureCode(featureCodes)
|
||||||
|
.build();
|
||||||
|
|
||||||
List<WorkspaceProductService.WorkspaceProduct> workspaceProducts = listWorkspaceProducts(treePermissionReq, featureIds);
|
Set<Integer> featureTypes = Optional.ofNullable(treePermissionReq.getFeatureResourceTypes())
|
||||||
|
.map(e -> e.stream()
|
||||||
|
.map(FeatureResourceType::getCode)
|
||||||
|
.collect(Collectors.toSet()))
|
||||||
|
.orElse(null);
|
||||||
|
|
||||||
//免授权
|
return saasAuthService.findIdentityAuthMix(identityAuthReq).getPermissions().stream()
|
||||||
List<Long> authFreeFeatureIds = listNotAuthFeatures(treePermissionReq);
|
.map(IdentityAuthRes.WorkspacePermission::getPermissionPoint)
|
||||||
|
.flatMap(Collection::stream)
|
||||||
|
.filter(e -> CollectionUtils.isEmpty(featureTypes)
|
||||||
|
|| featureTypes.contains(e.getFeatureType()))
|
||||||
|
.map(IdentityAuthRes.PermissionPoint::getFeatureId)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
//取交集确定权限
|
|
||||||
return mixFeatureIds(saasRoleUserV2DTOS, workspaceProducts, authFreeFeatureIds);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Long> listNotAuthFeatures(TreePermissionReq treePermissionReq) {
|
private List<Long> listNotAuthFeatures(TreePermissionReq treePermissionReq) {
|
||||||
@ -685,30 +700,22 @@ public class PermissionQueryServiceImpl implements PermissionQueryService {
|
|||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<WorkspaceProductService.WorkspaceProduct> listWorkspaceProducts(TreePermissionReq treePermissionReq,
|
private List<WorkspaceProductService.WorkspaceProductPermission> listWorkspaceProducts(TreePermissionReq treePermissionReq,
|
||||||
List<Long> featureIds) {
|
Set<String> featureCodes) {
|
||||||
//查询租户产品权限点
|
//查询租户产品权限点
|
||||||
Set<Long> workspaceIds = treePermissionReq.getWorkspaceOUPairs().stream()
|
Set<Long> workspaceIds = treePermissionReq.getWorkspaceOUPairs().stream()
|
||||||
.map(WorkspaceOUPair::getWorkspaceId)
|
.map(WorkspaceOUPair::getWorkspaceId)
|
||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
WorkspaceProductService.WorkspaceProductParam workspaceProductParam = WorkspaceProductService.WorkspaceProductParam.builder()
|
WorkspaceProductService.ListWorkspaceProductPermissionCacheParam listWorkspaceProductPermissionCacheParam = WorkspaceProductService.ListWorkspaceProductPermissionCacheParam
|
||||||
.terminal(treePermissionReq.getTerminal())
|
.builder()
|
||||||
.workspaceIds(workspaceIds)
|
.workspaceIds(workspaceIds)
|
||||||
.featureResourceTypes(treePermissionReq.getFeatureResourceTypes())
|
.featureCodes(featureCodes)
|
||||||
.type(NEW_FEATURE)
|
|
||||||
.build();
|
.build();
|
||||||
|
return workspaceProductService.listWorkspaceProductPermissionCached(listWorkspaceProductPermissionCacheParam);
|
||||||
if (CollectionUtils.isNotEmpty(featureIds)) {
|
|
||||||
workspaceProductParam.setFeatureIdPairs(Lists.newArrayList(FeatureIdPair.builder()
|
|
||||||
.featureIds(Sets.newHashSet(featureIds))
|
|
||||||
.type(NEW_FEATURE)
|
|
||||||
.build()));
|
|
||||||
}
|
|
||||||
return workspaceProductService.listWorkspaceProduct(workspaceProductParam);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<SaasRoleUserV2DTO> listUserPermission(TreePermissionReq treePermissionReq, List<Long> featureIds) {
|
private List<SaasRoleUserV2DTO> listUserPermission(TreePermissionReq treePermissionReq, Set<String> featureCodes) {
|
||||||
List<ListRoleUserRelationParam.WorkspaceOuPair> workspaceOuPairs = treePermissionReq.getWorkspaceOUPairs().stream()
|
List<ListRoleUserRelationParam.WorkspaceOuPair> workspaceOuPairs = treePermissionReq.getWorkspaceOUPairs().stream()
|
||||||
.map(e -> ListRoleUserRelationParam.WorkspaceOuPair.builder()
|
.map(e -> ListRoleUserRelationParam.WorkspaceOuPair.builder()
|
||||||
.workspaceId(e.getWorkspaceId())
|
.workspaceId(e.getWorkspaceId())
|
||||||
@ -720,28 +727,25 @@ public class PermissionQueryServiceImpl implements PermissionQueryService {
|
|||||||
.personId(treePermissionReq.getPersonId())
|
.personId(treePermissionReq.getPersonId())
|
||||||
.workspaceOuPairs(Lists.newArrayList(workspaceOuPairs))
|
.workspaceOuPairs(Lists.newArrayList(workspaceOuPairs))
|
||||||
.needRole(true)
|
.needRole(true)
|
||||||
.needPermissionRelation(true)
|
|
||||||
.featureResourceTypes(treePermissionReq.getFeatureResourceTypes())
|
|
||||||
.type(NEW_FEATURE)
|
|
||||||
.terminal(treePermissionReq.getTerminal())
|
.terminal(treePermissionReq.getTerminal())
|
||||||
.featureIds(featureIds)
|
|
||||||
.build();
|
.build();
|
||||||
return saasRoleUserRelationService.listV2(listRoleUserRelationParam).stream()
|
return saasRoleUserRelationService.listV2(listRoleUserRelationParam).stream()
|
||||||
.filter(e -> e.getSaasRole() != null)
|
.filter(e -> e.getSaasRole() != null)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Long> resolveFeatureIds(TreePermissionReq treePermissionReq) {
|
private Set<String> resolveFeatureCodes(TreePermissionReq treePermissionReq) {
|
||||||
if (StringUtils.isBlank(treePermissionReq.getUniCode())) {
|
if (StringUtils.isBlank(treePermissionReq.getUniCode())) {
|
||||||
return Collections.emptyList();
|
return Collections.emptySet();
|
||||||
}
|
}
|
||||||
|
|
||||||
PageSaasFeatureResourceReq pageSaasFeatureResourceReq = PageSaasFeatureResourceReq.builder()
|
PageElementFeatureResourceRelationReq pageElementFeatureResourceRelationReq = PageElementFeatureResourceRelationReq.builder()
|
||||||
.uniCodes(Sets.newHashSet(treePermissionReq.getUniCode()))
|
.featureResourceUniCodes(Sets.newHashSet(treePermissionReq.getUniCode()))
|
||||||
.build();
|
.build();
|
||||||
return featureResourceService.list(pageSaasFeatureResourceReq).stream()
|
return saasPageElementFeatureResourceRelationService.list(pageElementFeatureResourceRelationReq)
|
||||||
.map(SaasFeatureResourceResp::getId)
|
.stream()
|
||||||
.collect(Collectors.toList());
|
.map(SaasPageElementFeatureResourceRelation::getPageElementCode)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
}
|
}
|
||||||
|
|
||||||
private Set<Long> mixFeatureIds(List<SaasRoleUserV2DTO> saasRoleUsers,
|
private Set<Long> mixFeatureIds(List<SaasRoleUserV2DTO> saasRoleUsers,
|
||||||
|
|||||||
@ -1131,7 +1131,7 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
|
|||||||
PageSaasRoleParam pageParam = PageSaasRoleParam.builder().build();
|
PageSaasRoleParam pageParam = PageSaasRoleParam.builder().build();
|
||||||
BeanUtils.copyProperties(param, pageParam);
|
BeanUtils.copyProperties(param, pageParam);
|
||||||
pageParam.setPage(pageNumber);
|
pageParam.setPage(pageNumber);
|
||||||
pageParam.setPageSize(500);
|
pageParam.setPageSize(10000);
|
||||||
return page(pageParam);
|
return page(pageParam);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper;
|
|||||||
import cn.axzo.foundation.exception.Axssert;
|
import cn.axzo.foundation.exception.Axssert;
|
||||||
import cn.axzo.foundation.page.PageResp;
|
import cn.axzo.foundation.page.PageResp;
|
||||||
import cn.axzo.framework.domain.web.code.BaseCode;
|
import cn.axzo.framework.domain.web.code.BaseCode;
|
||||||
|
import cn.axzo.framework.rocketmq.Event;
|
||||||
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
|
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
|
||||||
import cn.axzo.tyr.client.common.enums.FeatureResourceAuthType;
|
import cn.axzo.tyr.client.common.enums.FeatureResourceAuthType;
|
||||||
import cn.axzo.tyr.client.common.enums.FeatureResourceStatus;
|
import cn.axzo.tyr.client.common.enums.FeatureResourceStatus;
|
||||||
@ -26,6 +27,8 @@ import cn.axzo.tyr.client.model.res.FeatureResourceTreeNode;
|
|||||||
import cn.axzo.tyr.client.model.res.PageElementBasicDTO;
|
import cn.axzo.tyr.client.model.res.PageElementBasicDTO;
|
||||||
import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp;
|
import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp;
|
||||||
import cn.axzo.tyr.server.common.util.Throws;
|
import cn.axzo.tyr.server.common.util.Throws;
|
||||||
|
import cn.axzo.tyr.server.config.MqProducer;
|
||||||
|
import cn.axzo.tyr.server.event.payload.SaasFeatureResourceUpsertPayload;
|
||||||
import cn.axzo.tyr.server.model.ResourcePermission;
|
import cn.axzo.tyr.server.model.ResourcePermission;
|
||||||
import cn.axzo.tyr.server.model.ResourcePermissionQueryDTO;
|
import cn.axzo.tyr.server.model.ResourcePermissionQueryDTO;
|
||||||
import cn.axzo.tyr.server.model.convert.SaasFeatureResourceConvert;
|
import cn.axzo.tyr.server.model.convert.SaasFeatureResourceConvert;
|
||||||
@ -46,6 +49,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
import com.google.common.collect.Sets;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
@ -64,6 +68,7 @@ import java.util.Set;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static cn.axzo.tyr.server.config.exception.BizResultCode.FEATURE_RESOURCE_NOT_FOUND;
|
import static cn.axzo.tyr.server.config.exception.BizResultCode.FEATURE_RESOURCE_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;
|
import static cn.axzo.tyr.server.repository.entity.SaasFeatureResource.DEFAULT_WORKSPACE_TYPE;
|
||||||
import static cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation.NEW_FEATURE;
|
import static cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation.NEW_FEATURE;
|
||||||
|
|
||||||
@ -88,7 +93,9 @@ public class SaasFeatureResourceServiceImpl extends ServiceImpl<SaasFeatureResou
|
|||||||
private final SaasPageElementService saasPageElementService;
|
private final SaasPageElementService saasPageElementService;
|
||||||
private final SaasPgroupPermissionRelationService saasPgroupPermissionRelationService;
|
private final SaasPgroupPermissionRelationService saasPgroupPermissionRelationService;
|
||||||
private final SaasPageElementFeatureResourceRelationService saasPageElementFeatureResourceRelationService;
|
private final SaasPageElementFeatureResourceRelationService saasPageElementFeatureResourceRelationService;
|
||||||
|
private final MqProducer mqProducer;
|
||||||
|
|
||||||
|
private static final String TARGET_TYPE = "saasFeatureResourceId";
|
||||||
@Override
|
@Override
|
||||||
public List<SaasFeatureResource> listNavByIds(List<Long> featureIds, List<Integer> featureTypes) {
|
public List<SaasFeatureResource> listNavByIds(List<Long> featureIds, List<Integer> featureTypes) {
|
||||||
//按需扩展要查询的字段
|
//按需扩展要查询的字段
|
||||||
@ -252,6 +259,18 @@ public class SaasFeatureResourceServiceImpl extends ServiceImpl<SaasFeatureResou
|
|||||||
}
|
}
|
||||||
deleteComponentRecursionById(baseResource.getId(), req.getComponentSaveReqList(), req.getOperatorId());
|
deleteComponentRecursionById(baseResource.getId(), req.getComponentSaveReqList(), req.getOperatorId());
|
||||||
|
|
||||||
|
// 改不动了,消费MQ时查询子节点信息做逻辑处理,反正mq里面不能带太多的消息内容
|
||||||
|
Set<Long> mqUpsertIds = Sets.newHashSet();
|
||||||
|
mqUpsertIds.add(baseResource.getId());
|
||||||
|
|
||||||
|
Event event = Event.builder()
|
||||||
|
.targetType(TARGET_TYPE)
|
||||||
|
.eventCode(SAAS_FEATURE_RESOURCE_UPSERT.getEventCode())
|
||||||
|
.data(SaasFeatureResourceUpsertPayload.builder()
|
||||||
|
.ids(mqUpsertIds)
|
||||||
|
.build())
|
||||||
|
.build();
|
||||||
|
mqProducer.send(event);
|
||||||
return baseResource.getId();
|
return baseResource.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -552,7 +571,9 @@ public class SaasFeatureResourceServiceImpl extends ServiceImpl<SaasFeatureResou
|
|||||||
return Collections.emptyMap();
|
return Collections.emptyMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
List<String> uniCodes = Lists.transform(saasFeatureResources, SaasFeatureResource::getUniCode);
|
Set<String> uniCodes = saasFeatureResources.stream()
|
||||||
|
.map(SaasFeatureResource::getUniCode)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
PageElementFeatureResourceRelationReq pageElementFeatureResourceRelationReq = PageElementFeatureResourceRelationReq.builder()
|
PageElementFeatureResourceRelationReq pageElementFeatureResourceRelationReq = PageElementFeatureResourceRelationReq.builder()
|
||||||
.featureResourceUniCodes(uniCodes)
|
.featureResourceUniCodes(uniCodes)
|
||||||
.build();
|
.build();
|
||||||
|
|||||||
@ -25,7 +25,7 @@ public class SaasPageElementFeatureResourceRelationServiceImpl extends ServiceIm
|
|||||||
public List<SaasPageElementFeatureResourceRelation> list(PageElementFeatureResourceRelationReq param) {
|
public List<SaasPageElementFeatureResourceRelation> list(PageElementFeatureResourceRelationReq param) {
|
||||||
return PageConverter.drainAll(pageNumber -> {
|
return PageConverter.drainAll(pageNumber -> {
|
||||||
param.setPage(pageNumber);
|
param.setPage(pageNumber);
|
||||||
param.setPageSize(500);
|
param.setPageSize(1000);
|
||||||
return page(param);
|
return page(param);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -10,12 +10,12 @@ import cn.axzo.tyr.server.repository.dao.ProductModuleDao;
|
|||||||
import cn.axzo.tyr.server.repository.entity.ProductFeatureQuery;
|
import cn.axzo.tyr.server.repository.entity.ProductFeatureQuery;
|
||||||
import cn.axzo.tyr.server.repository.entity.SaasProductModuleFeatureRelation;
|
import cn.axzo.tyr.server.repository.entity.SaasProductModuleFeatureRelation;
|
||||||
import cn.axzo.tyr.server.service.ProductFeatureRelationService;
|
import cn.axzo.tyr.server.service.ProductFeatureRelationService;
|
||||||
|
import cn.axzo.tyr.server.service.ProductPermissionCacheService;
|
||||||
import cn.axzo.tyr.server.service.WorkspaceProductService;
|
import cn.axzo.tyr.server.service.WorkspaceProductService;
|
||||||
import cn.axzo.tyr.server.utils.RpcInternalUtil;
|
import cn.axzo.tyr.server.utils.RpcInternalUtil;
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.lang.Pair;
|
import cn.hutool.core.lang.Pair;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import com.google.common.collect.Streams;
|
import com.google.common.collect.Streams;
|
||||||
@ -53,7 +53,10 @@ public class WorkspaceProductServiceImpl implements WorkspaceProductService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private ProductFeatureRelationService productFeatureRelationService;
|
private ProductFeatureRelationService productFeatureRelationService;
|
||||||
@Autowired
|
@Autowired
|
||||||
protected StringRedisTemplate redisTemplate;
|
private StringRedisTemplate redisTemplate;
|
||||||
|
@Autowired
|
||||||
|
private ProductPermissionCacheService productPermissionCacheService;
|
||||||
|
|
||||||
|
|
||||||
/** 授权缓存过期时间 **/
|
/** 授权缓存过期时间 **/
|
||||||
@Value("${workspace.product.expire:90}")
|
@Value("${workspace.product.expire:90}")
|
||||||
@ -136,13 +139,7 @@ public class WorkspaceProductServiceImpl implements WorkspaceProductService {
|
|||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
ListWorkspaceProductParam listWorkspaceProductParam = ListWorkspaceProductParam.builder()
|
Map<Long, Set<Long>> workspaceProducts = listWorkspaceProduct(param.getWorkspaceIds());
|
||||||
.workspaceIds(param.getWorkspaceIds())
|
|
||||||
.build();
|
|
||||||
Map<Long, Set<Long>> workspaceProducts = listWorkspaceProduct(listWorkspaceProductParam);
|
|
||||||
|
|
||||||
// 存在项目没有在缓存中查询到产品的情况
|
|
||||||
fillCacheWorkspaseProducts(param, workspaceProducts);
|
|
||||||
|
|
||||||
Set<Long> productIds = workspaceProducts.values().stream()
|
Set<Long> productIds = workspaceProducts.values().stream()
|
||||||
.flatMap(Collection::stream)
|
.flatMap(Collection::stream)
|
||||||
@ -152,19 +149,8 @@ public class WorkspaceProductServiceImpl implements WorkspaceProductService {
|
|||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 已被删除产品过滤一层
|
|
||||||
Set<Long> finalProductIds = productModuleDao.listByIds(productIds)
|
|
||||||
.stream()
|
|
||||||
.filter(productModule -> Objects.equals(productModule.getIsDelete(),0L))
|
|
||||||
.map(BaseEntity::getId)
|
|
||||||
.collect(Collectors.toSet());
|
|
||||||
if (CollectionUtil.isEmpty(finalProductIds)) {
|
|
||||||
log.warn("all product is deleted for workspace :{}", param.getWorkspaceIds());
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
|
|
||||||
ProductFeatureQuery productFeatureQuery = ProductFeatureQuery.builder()
|
ProductFeatureQuery productFeatureQuery = ProductFeatureQuery.builder()
|
||||||
.productIds(finalProductIds)
|
.productIds(productIds)
|
||||||
.featureResourceTypes(param.getFeatureResourceTypes())
|
.featureResourceTypes(param.getFeatureResourceTypes())
|
||||||
.terminal(param.getTerminal())
|
.terminal(param.getTerminal())
|
||||||
.type(param.getType())
|
.type(param.getType())
|
||||||
@ -238,13 +224,13 @@ public class WorkspaceProductServiceImpl implements WorkspaceProductService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 组装在缓存中没有查询到产品的项目
|
* 组装在缓存中没有查询到产品的项目
|
||||||
* @param param
|
* @param workspaceIds
|
||||||
* @param workspaceProducts
|
* @param workspaceProducts
|
||||||
*/
|
*/
|
||||||
private void fillCacheWorkspaseProducts(WorkspaceProductParam param,
|
private void fillCacheWorkspaceProducts(Set<Long> workspaceIds,
|
||||||
Map<Long, Set<Long>> workspaceProducts) {
|
Map<Long, Set<Long>> workspaceProducts) {
|
||||||
|
|
||||||
Sets.SetView<Long> difference = Sets.difference(param.getWorkspaceIds(), workspaceProducts.keySet());
|
Sets.SetView<Long> difference = Sets.difference(workspaceIds, workspaceProducts.keySet());
|
||||||
if (difference.isEmpty()) {
|
if (difference.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -287,4 +273,82 @@ public class WorkspaceProductServiceImpl implements WorkspaceProductService {
|
|||||||
private String getKey(Object... params) {
|
private String getKey(Object... params) {
|
||||||
return String.format(WORKSPACE_PRODUCT_KEY, params);
|
return String.format(WORKSPACE_PRODUCT_KEY, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<WorkspaceProductPermission> listWorkspaceProductPermissionCached(ListWorkspaceProductPermissionCacheParam param) {
|
||||||
|
Map<Long, Set<Long>> workspaceProducts = listWorkspaceProduct(param.getWorkspaceIds());
|
||||||
|
|
||||||
|
Set<Long> productIds = workspaceProducts.values().stream()
|
||||||
|
.flatMap(Collection::stream)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(productIds)) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
ProductPermissionCacheService.ListProductPermissionParam listProductPermissionParam = ProductPermissionCacheService.ListProductPermissionParam.builder()
|
||||||
|
.productIds(productIds)
|
||||||
|
.featureCodes(param.getFeatureCodes())
|
||||||
|
.build();
|
||||||
|
Map<Long, List<ProductPermissionCacheService.PermissionDTO>> productPermissionMap = productPermissionCacheService.list(listProductPermissionParam);
|
||||||
|
|
||||||
|
return workspaceProducts.entrySet().stream()
|
||||||
|
.filter(e -> CollectionUtils.isNotEmpty(e.getValue()))
|
||||||
|
.map(e -> {
|
||||||
|
List<ProductPermission> productPermissions = e.getValue().stream()
|
||||||
|
.map(productId -> {
|
||||||
|
List<ProductPermissionCacheService.PermissionDTO> permissions = productPermissionMap.get(productId);
|
||||||
|
if (CollectionUtils.isEmpty(permissions)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return ProductPermission.builder()
|
||||||
|
.productId(productId)
|
||||||
|
.permissions(permissions)
|
||||||
|
.build();
|
||||||
|
})
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
return WorkspaceProductPermission.builder()
|
||||||
|
.workspaceId(e.getKey())
|
||||||
|
.productPermissions(productPermissions)
|
||||||
|
.build();
|
||||||
|
})
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<Long, Set<Long>> listWorkspaceProduct(Set<Long> workspaceIds) {
|
||||||
|
if (CollectionUtils.isEmpty(workspaceIds)) {
|
||||||
|
return Collections.emptyMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
ListWorkspaceProductParam listWorkspaceProductParam = ListWorkspaceProductParam.builder()
|
||||||
|
.workspaceIds(workspaceIds)
|
||||||
|
.build();
|
||||||
|
Map<Long, Set<Long>> workspaceProducts = listWorkspaceProduct(listWorkspaceProductParam);
|
||||||
|
|
||||||
|
// 存在项目没有在缓存中查询到产品的情况
|
||||||
|
fillCacheWorkspaceProducts(workspaceIds, workspaceProducts);
|
||||||
|
|
||||||
|
Set<Long> productIds = workspaceProducts.values().stream()
|
||||||
|
.flatMap(Collection::stream)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(productIds)) {
|
||||||
|
return Collections.emptyMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 需要过滤掉已经被删除的产品
|
||||||
|
Set<Long> finalProductIds = productModuleDao.listByIds(productIds).stream()
|
||||||
|
.filter(productModule -> Objects.equals(productModule.getIsDelete(),0L))
|
||||||
|
.map(BaseEntity::getId)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
workspaceProducts.entrySet().forEach(e -> {
|
||||||
|
Set<Long> effectProductIds = e.getValue().stream()
|
||||||
|
.filter(finalProductIds::contains)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
e.setValue(effectProductIds);
|
||||||
|
});
|
||||||
|
|
||||||
|
return workspaceProducts;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,4 +19,16 @@
|
|||||||
AND natural_person_id = #{param.naturalPersonId}
|
AND natural_person_id = #{param.naturalPersonId}
|
||||||
</if>
|
</if>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="listRoleIds" resultType="java.lang.Long">
|
||||||
|
SELECT DISTINCT role_id
|
||||||
|
FROM saas_role_user_relation
|
||||||
|
WHERE is_delete = 0
|
||||||
|
<if test="param.ouId !=0 and param.ouId != null">
|
||||||
|
AND ou_id = #{param.ouId}
|
||||||
|
</if>
|
||||||
|
<if test="param.workspaceId !=0 and param.workspaceId != null">
|
||||||
|
AND workspace_id = #{param.workspaceId}
|
||||||
|
</if>
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
Loading…
Reference in New Issue
Block a user