feat:(feature/REQ-2750) 角色列表查询增加角色分组查询条件

This commit is contained in:
lilong 2024-09-09 17:26:42 +08:00
parent 3ee17f2e67
commit 08be779df6
22 changed files with 381 additions and 185 deletions

View File

@ -1,5 +1,8 @@
package cn.axzo.tyr.client.model.req;
import cn.axzo.foundation.dao.support.wrapper.CriteriaField;
import cn.axzo.foundation.dao.support.wrapper.Operator;
import cn.axzo.tyr.client.common.enums.FeatureResourceType;
import cn.axzo.tyr.client.model.roleuser.req.ListRoleUserRelationParam;
import lombok.AllArgsConstructor;
import lombok.Data;
@ -18,36 +21,43 @@ public class ListRoleReq {
/**
* 角色id
*/
@CriteriaField(field = "id", operator = Operator.IN)
private List<Long> roleIds;
/**
* 租户类型:DictWorkSpaceTypeEnum
*/
@CriteriaField(field = "workspaceType", operator = Operator.EQ)
private Integer workspaceType;
/**
* 是否显示
*/
@CriteriaField(field = "isDisplay", operator = Operator.EQ)
private Boolean isDisplay;
/**
* 角色权限码
*/
@CriteriaField(field = "roleCode", operator = Operator.EQ)
private String roleCode;
/**
* 租户id
*/
@CriteriaField(field = "workspaceId", operator = Operator.IN)
private List<Long> workspaceIds;
/**
* 单位id
*/
@CriteriaField(field = "ownerOuId", operator = Operator.IN)
private List<Long> ouIds;
/**
* 是否启用
*/
@CriteriaField(field = "enabled", operator = Operator.EQ)
private Boolean enabled;
/**
@ -58,35 +68,98 @@ public class ListRoleReq {
* auto_own:虚拟角色(自定义权限使用)
* common:自定义角色
*/
@CriteriaField(field = "roleType", operator = Operator.IN)
private List<String> roleTypes;
@CriteriaField(field = "id", operator = Operator.NE)
private Long idNE;
/**
* 是否需要角色下的权限信息
*/
@CriteriaField(ignore = true)
private Boolean needPermission;
/**
* 是否需要角色对应的角色分组信息
*/
@CriteriaField(ignore = true)
private Boolean needRoleGroup;
/**
* 是否需要角色对应的用户信息
*/
@CriteriaField(ignore = true)
private Boolean needRoleUser;
/**
* 当前非oms和政务端的权限存储在saas_feature
* 权限点从saas_feature表查询
*/
@CriteriaField(ignore = true)
private Boolean needPermissionOld;
/**
* 根据权限点id过滤
*/
@CriteriaField(ignore = true)
private List<Long> featureIds;
@CriteriaField(ignore = true)
private Boolean needPermissionRelation;
/**
* 是否需要预设角色因为预设角色的workspaceId和ouId为-1
*/
@CriteriaField(ignore = true)
private Boolean needPresetRole;
/**
* 查询菜单树节点类型
*/
@CriteriaField(ignore = true)
private List<FeatureResourceType> featureResourceTypes;
/**
* 新旧权限点needPermissionRelation = true时最好带上因为新旧权限点会有冲突的情况发生
*/
@CriteriaField(ignore = true)
private Integer type;
/**
* 查询权限点时会根据端过滤增加效率目前只有CMS端的新版本才冗余了端
*/
@CriteriaField(ignore = true)
private String terminal;
@CriteriaField(field = "workspaceId", operator = Operator.EQ)
private Long workspaceId;
@CriteriaField(field = "ownerOuId", operator = Operator.EQ)
private Long ouId;
/**
* workspaceId和ouId配对查询
* 例如((workspaceId = ## and ouId = ##) or (workspaceId = ## and ouId = ##))
*/
@CriteriaField(ignore = true)
private List<ListRoleUserRelationParam.WorkspaceOuPair> workspaceOuPairs;
/**
* 角色权限码
*/
@CriteriaField(field = "roleCode", operator = Operator.IN)
private Set<String> roleCodes;
/**
* 角色分组code
*/
@CriteriaField(ignore = true)
private Set<String> roleGroupCodes;
/**
* 单位类型
*/
@CriteriaField(field = "productUnitType", operator = Operator.IN)
private Set<Integer> productUnitTypes;
}

View File

@ -7,6 +7,8 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.Set;
@SuperBuilder
@Data
@ -25,4 +27,10 @@ public class ListSaasRoleGroupParam {
@CriteriaField(ignore = true)
private Boolean needRole;
@CriteriaField(field = "code", operator = Operator.IN)
private Set<String> roleGroupCodes;
@CriteriaField(ignore = true)
private Boolean needRoleGroupRelation;
}

View File

@ -1,27 +1,42 @@
package cn.axzo.tyr.client.model.req;
import cn.axzo.foundation.dao.support.wrapper.CriteriaField;
import cn.axzo.foundation.page.IPageReq;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.tyr.client.model.res.SaasRoleRes;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.Collections;
import java.util.List;
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class PageRoleReq extends ListRoleReq {
public class PageRoleReq extends ListRoleReq implements IPageReq {
@CriteriaField(ignore = true)
Integer page;
private Integer page;
private Integer pageSize;
@CriteriaField(ignore = true)
Integer pageSize;
/**
* 排序使用示例createAt__DESC
* 排序使用示例createTime__DESC
*/
private List<String> sort;
@CriteriaField(ignore = true)
List<String> sort;
public PageResp toEmpty() {
return PageResp.builder()
.current(this.getPage())
.size(this.getPageSize())
.total(0)
.data(Collections.emptyList())
.build();
}
}

View File

@ -0,0 +1,25 @@
package cn.axzo.tyr.client.model.res;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class RoleGroupRelationRes {
private Long id;
/**
* 角色id
*/
private Long roleId;
/**
* 角色分组id
*/
private Long saasRoleGroupId;
}

View File

@ -64,4 +64,9 @@ public class SaasRoleGroupDTO {
* 角色信息
*/
private List<SaasRoleRes> saasRoles;
/**
* 角色分组与角色关联关系
*/
private List<RoleGroupRelationRes> roleGroupRelations;
}

View File

@ -14,8 +14,10 @@ import cn.axzo.tyr.client.common.enums.RoleTypeEnum;
import cn.axzo.tyr.client.model.product.ProductSearchListReq;
import cn.axzo.tyr.client.model.req.CommonDictQueryReq;
import cn.axzo.tyr.client.model.req.GetFeatureResourceTreeReq;
import cn.axzo.tyr.client.model.req.ListRoleReq;
import cn.axzo.tyr.client.model.req.PagePgroupPermissionRelationReq;
import cn.axzo.tyr.client.model.req.PageProductFeatureRelationReq;
import cn.axzo.tyr.client.model.req.PageRoleReq;
import cn.axzo.tyr.client.model.req.PermissionCheckReq;
import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq;
import cn.axzo.tyr.client.model.res.CommonDictResp;
@ -254,7 +256,7 @@ public class PrivateController {
return "ok";
}
Map<Long, SaasRoleRes> saasRoles = roleService.list(RoleService.ListSaasRoleParam.builder()
Map<Long, SaasRoleRes> saasRoles = roleService.list(ListRoleReq.builder()
.roleIds(Lists.transform(saasRoleGroupRelations, SaasRoleGroupRelation::getRoleId))
.build())
.stream()
@ -721,7 +723,7 @@ public class PrivateController {
}
@PostMapping("/api/private/rolePermission/store")
public Object storeRolePermission(@RequestBody RoleService.PageSaasRoleParam request) throws Exception {
public Object storeRolePermission(@RequestBody PageRoleReq request) throws Exception {
cacheRolePermissionJob.execute(JSON.toJSONString(request));
return "ok";
}
@ -739,7 +741,7 @@ public class PrivateController {
}
@PostMapping("/api/private/roleSaasFeature/store")
public Object storeRoleSaasFeature(@RequestBody RoleService.PageSaasRoleParam request) throws Exception {
public Object storeRoleSaasFeature(@RequestBody PageRoleReq request) throws Exception {
cacheRoleFeatureResourceJob.execute(JSON.toJSONString(request));
return "ok";
}

View File

@ -263,7 +263,7 @@ public class SaasRoleController implements TyrSaasRoleApi {
.saasRoleGroupIds(Lists.transform(saasRoleGroupRelations, SaasRoleGroupRelation::getSaasRoleGroupId))
.build());
List<SaasRoleRes> saasRoles = roleService.list(RoleService.ListSaasRoleParam.builder()
List<SaasRoleRes> saasRoles = roleService.list(ListRoleReq.builder()
.roleIds(Lists.transform(saasRoleGroupRelationAll, SaasRoleGroupRelation::getRoleId))
.build())
.stream()
@ -289,17 +289,13 @@ public class SaasRoleController implements TyrSaasRoleApi {
@Override
public ApiPageResult<SaasRoleRes> page(PageRoleReq request) {
RoleService.PageSaasRoleParam param = RoleService.PageSaasRoleParam.builder().build();
BeanUtils.copyProperties(request, param);
cn.axzo.foundation.page.PageResp<SaasRoleRes> page = roleService.page(param);
cn.axzo.foundation.page.PageResp<SaasRoleRes> page = roleService.page(request);
return ApiPageResult.ok(page.getData(), page.getTotal(), (int) page.getCurrent(), (int) page.getSize());
}
@Override
public ApiListResult<SaasRoleRes> list(ListRoleReq request) {
RoleService.ListSaasRoleParam param = RoleService.ListSaasRoleParam.builder().build();
BeanUtils.copyProperties(request, param);
return ApiListResult.ok(roleService.list(param));
return ApiListResult.ok(roleService.list(request));
}
/**
@ -347,7 +343,7 @@ public class SaasRoleController implements TyrSaasRoleApi {
List<SaasRoleGroupRelation> saasRoleGroupRelations = saasRoleGroupRelationDao.getByGroupIds(roleGroupIds);
Map<Long, SaasRoleRes> saasRoles = roleService.list(RoleService.ListSaasRoleParam.builder()
Map<Long, SaasRoleRes> saasRoles = roleService.list(ListRoleReq.builder()
.roleIds(Lists.transform(saasRoleGroupRelations, SaasRoleGroupRelation::getRoleId))
.isDisplay(req.getIsDisplay())
.workspaceType(req.getWorkspaceType())

View File

@ -2,6 +2,7 @@ package cn.axzo.tyr.server.event.inner;
import cn.axzo.framework.rocketmq.Event;
import cn.axzo.framework.rocketmq.EventConsumer;
import cn.axzo.tyr.client.model.req.ListRoleReq;
import cn.axzo.tyr.client.model.req.PageSaasFeatureResourceReq;
import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp;
import cn.axzo.tyr.client.model.res.SaasPermissionRelationRes;
@ -80,7 +81,7 @@ public class CacheRolePermissionHandler implements InitializingBean {
// return;
// }
RoleService.ListSaasRoleParam listSaasRoleParam = RoleService.ListSaasRoleParam.builder()
ListRoleReq listSaasRoleParam = ListRoleReq.builder()
.roleIds(Optional.ofNullable(payload.getRoleIds())
.map(Lists::newArrayList)
.orElse(null))
@ -99,7 +100,7 @@ public class CacheRolePermissionHandler implements InitializingBean {
return;
}
RoleService.ListSaasRoleParam listSaasRoleParam = RoleService.ListSaasRoleParam.builder()
ListRoleReq listSaasRoleParam = ListRoleReq.builder()
.needPermissionRelation(true)
.build();
List<SaasRoleRes> roles = roleService.list(listSaasRoleParam);

View File

@ -2,6 +2,7 @@ package cn.axzo.tyr.server.event.inner;
import cn.axzo.framework.rocketmq.Event;
import cn.axzo.framework.rocketmq.EventConsumer;
import cn.axzo.tyr.client.model.req.ListRoleReq;
import cn.axzo.tyr.client.model.req.PageSaasFeatureResourceReq;
import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp;
import cn.axzo.tyr.client.model.res.SaasPermissionRelationRes;
@ -75,7 +76,7 @@ public class CacheRoleSaasFeatureResourceHandler implements InitializingBean {
// return;
// }
RoleService.ListSaasRoleParam listSaasRoleParam = RoleService.ListSaasRoleParam.builder()
ListRoleReq listSaasRoleParam = ListRoleReq.builder()
.roleIds(Optional.ofNullable(payload.getRoleIds())
.map(Lists::newArrayList)
.orElse(null))
@ -96,7 +97,7 @@ public class CacheRoleSaasFeatureResourceHandler implements InitializingBean {
return;
}
RoleService.ListSaasRoleParam listSaasRoleParam = RoleService.ListSaasRoleParam.builder()
ListRoleReq listSaasRoleParam = ListRoleReq.builder()
.needPermissionRelation(true)
.type(NEW_FEATURE)
.build();

View File

@ -1,6 +1,7 @@
package cn.axzo.tyr.server.job;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.tyr.client.model.req.PageRoleReq;
import cn.axzo.tyr.client.model.res.SaasPermissionRelationRes;
import cn.axzo.tyr.client.model.res.SaasRoleRes;
import cn.axzo.tyr.server.event.inner.CacheRoleSaasFeatureResourceHandler;
@ -48,9 +49,9 @@ public class CacheRoleFeatureResourceJob extends IJobHandler {
public ReturnT<String> execute(String s) throws Exception {
log.info("start CacheRoleFeatureResourceJob, s:{}", s);
RoleService.PageSaasRoleParam pageSaasRoleParam = Optional.ofNullable(s)
.map(e -> JSONObject.parseObject(e, RoleService.PageSaasRoleParam.class))
.orElseGet(() -> RoleService.PageSaasRoleParam.builder().build());
PageRoleReq pageSaasRoleParam = Optional.ofNullable(s)
.map(e -> JSONObject.parseObject(e, PageRoleReq.class))
.orElseGet(() -> PageRoleReq.builder().build());
// 因为角色权限集是重复使用通过角色找权限集数据量太大直接查询所有权限集的权限比较快
Map<Long, List<SaasPermissionRelationRes>> permissionRelations = listPgroupPermissionRelation();

View File

@ -1,6 +1,7 @@
package cn.axzo.tyr.server.job;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.tyr.client.model.req.PageRoleReq;
import cn.axzo.tyr.client.model.res.SaasPermissionRelationRes;
import cn.axzo.tyr.client.model.res.SaasRoleRes;
import cn.axzo.tyr.server.event.inner.CacheRolePermissionHandler;
@ -48,9 +49,9 @@ public class CacheRolePermissionJob extends IJobHandler {
public ReturnT<String> execute(String s) throws Exception {
log.info("start CacheRolePermissionJob, s:{}", s);
RoleService.PageSaasRoleParam pageSaasRoleParam = Optional.ofNullable(s)
.map(e -> JSONObject.parseObject(e, RoleService.PageSaasRoleParam.class))
.orElseGet(() -> RoleService.PageSaasRoleParam.builder().build());
PageRoleReq pageSaasRoleParam = Optional.ofNullable(s)
.map(e -> JSONObject.parseObject(e, PageRoleReq.class))
.orElseGet(() -> PageRoleReq.builder().build());
// 因为角色权限集是重复使用通过角色找权限集数据量太大直接查询所有权限集的权限比较快
Map<Long, List<SaasPermissionRelationRes>> permissionRelations = listPgroupPermissionRelation();

View File

@ -9,6 +9,8 @@ import cn.axzo.tyr.client.model.enums.IdentityType;
import cn.axzo.tyr.client.model.req.ChangeGroupLeaderRoleReq;
import cn.axzo.tyr.client.model.req.FeatureIdPair;
import cn.axzo.tyr.client.model.req.FeatureRoleRelationReq;
import cn.axzo.tyr.client.model.req.ListRoleReq;
import cn.axzo.tyr.client.model.req.PageRoleReq;
import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq;
import cn.axzo.tyr.client.model.req.QueryRoleByNameReq;
import cn.axzo.tyr.client.model.req.QuerySaasRoleReq;
@ -96,9 +98,9 @@ public interface RoleService extends IService<SaasRole> {
/** 查询超管和管理员角色 **/
List<SaasRole> listAdmins(Long workspaceId, Long ouId);
List<SaasRoleRes> list(ListSaasRoleParam param);
List<SaasRoleRes> list(ListRoleReq param);
cn.axzo.foundation.page.PageResp<SaasRoleRes> page(PageSaasRoleParam param);
cn.axzo.foundation.page.PageResp<SaasRoleRes> page(PageRoleReq param);
void saveOrUpdateFeatureRoleRelation(List<FeatureRoleRelationReq.RelationRoleSettings> req, Long operatorId);
@ -106,129 +108,5 @@ public interface RoleService extends IService<SaasRole> {
List<SaasFeature> validFeature(List<Long> featureIds);
@SuperBuilder
@Data
@NoArgsConstructor
@AllArgsConstructor
class ListSaasRoleParam {
@CriteriaField(field = "id", operator = Operator.IN)
private List<Long> roleIds;
@CriteriaField(field = "workspaceType", operator = Operator.EQ)
private Integer workspaceType;
@CriteriaField(field = "isDisplay", operator = Operator.EQ)
private Boolean isDisplay;
@CriteriaField(field = "roleCode", operator = Operator.EQ)
private String roleCode;
@CriteriaField(field = "workspaceId", operator = Operator.IN)
private List<Long> workspaceIds;
@CriteriaField(field = "ownerOuId", operator = Operator.IN)
private List<Long> ouIds;
@CriteriaField(field = "enabled", operator = Operator.EQ)
private Boolean enabled;
@CriteriaField(field = "roleType", operator = Operator.IN)
private List<String> roleTypes;
@CriteriaField(field = "id", operator = Operator.NE)
private Long idNE;
/**
* 角色权限码
*/
@CriteriaField(field = "roleCode", operator = Operator.IN)
private Set<String> roleCodes;
/**
* 权限点从saas_feature_resource表查询
*/
@CriteriaField(ignore = true)
private Boolean needPermission;
@CriteriaField(ignore = true)
private Boolean needRoleGroup;
@CriteriaField(ignore = true)
private Boolean needRoleUser;
/**
* 当前非oms和政务端的权限存储在saas_feature
* 权限点从saas_feature表查询
*/
@CriteriaField(ignore = true)
private Boolean needPermissionOld;
/**
* 根据权限点id过滤
*/
@CriteriaField(ignore = true)
private List<Long> featureIds;
@CriteriaField(ignore = true)
private Boolean needPermissionRelation;
/**
* 是否需要预设角色因为预设角色的workspaceId和ouId为-1
*/
@CriteriaField(ignore = true)
private Boolean needPresetRole;
/**
* 查询菜单树节点类型
*/
@CriteriaField(ignore = true)
private List<FeatureResourceType> featureResourceTypes;
/**
* 新旧权限点needPermissionRelation = true时最好带上因为新旧权限点会有冲突的情况发生
*/
@CriteriaField(ignore = true)
private Integer type;
/**
* 查询权限点时会根据端过滤增加效率目前只有CMS端的新版本才冗余了端
*/
@CriteriaField(ignore = true)
private String terminal;
/**
* workspaceId和ouId配对查询
* 例如((workspaceId = ## and ouId = ##) or (workspaceId = ## and ouId = ##))
*/
@CriteriaField(ignore = true)
private List<ListRoleUserRelationParam.WorkspaceOuPair> workspaceOuPairs;
@CriteriaField(field = "workspaceId", operator = Operator.EQ)
private Long workspaceId;
@CriteriaField(field = "ownerOuId", operator = Operator.EQ)
private Long ouId;
}
@SuperBuilder
@Data
@NoArgsConstructor
@AllArgsConstructor
class PageSaasRoleParam extends ListSaasRoleParam implements IPageReq {
@CriteriaField(ignore = true)
Integer page;
@CriteriaField(ignore = true)
Integer pageSize;
/**
* 排序使用示例createTime__DESC
*/
@CriteriaField(ignore = true)
List<String> sort;
}
List<RoleWithFeature> listWithFeatures(Set<Long> roleIds, Set<Long> featureIds);
}

View File

@ -23,10 +23,21 @@ public interface SaasRoleUserRelationService extends IService<SaasRoleUserRelati
cn.axzo.foundation.page.PageResp<SaasRoleUserV2DTO> page(PageRoleUserRelationParam param);
void upsert(List<SaasRoleUserRelation> saasRoleUserRelations);
void upsert(UpsertParam param);
void batchRemove(BatchRemoveParam param);
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
class UpsertParam {
private List<SaasRoleUserRelation> saasRoleUserRelations;
private Long operator;
}
@Data
@Builder
@NoArgsConstructor

View File

@ -2,6 +2,7 @@ package cn.axzo.tyr.server.service.impl;
import cn.axzo.foundation.exception.Axssert;
import cn.axzo.pokonyan.config.redis.RedisClient;
import cn.axzo.tyr.client.model.req.ListRoleReq;
import cn.axzo.tyr.client.model.res.SaasRoleRes;
import cn.axzo.tyr.server.event.inner.CacheRolePermissionHandler;
import cn.axzo.tyr.server.service.RolePermissionCacheService;
@ -175,7 +176,7 @@ public class RolePermissionCacheServiceImpl implements RolePermissionCacheServic
return;
}
RoleService.ListSaasRoleParam listSaasRoleParam = RoleService.ListSaasRoleParam.builder()
ListRoleReq listSaasRoleParam = ListRoleReq.builder()
.roleIds(Lists.newArrayList(difference))
.needPermissionRelation(true)
.build();

View File

@ -3,6 +3,7 @@ package cn.axzo.tyr.server.service.impl;
import cn.axzo.foundation.exception.Axssert;
import cn.axzo.pokonyan.config.redis.RedisClient;
import cn.axzo.tyr.client.common.enums.FeatureResourceType;
import cn.axzo.tyr.client.model.req.ListRoleReq;
import cn.axzo.tyr.client.model.res.SaasRoleRes;
import cn.axzo.tyr.server.event.inner.CacheRoleSaasFeatureResourceHandler;
import cn.axzo.tyr.server.service.RoleSaasFeatureResourceCacheService;
@ -146,7 +147,7 @@ public class RoleSaasFeatureResourceCacheServiceImpl implements RoleSaasFeatureR
return;
}
RoleService.ListSaasRoleParam listSaasRoleParam = RoleService.ListSaasRoleParam.builder()
ListRoleReq listSaasRoleParam = ListRoleReq.builder()
.roleIds(Lists.newArrayList(difference))
.needPermissionRelation(true)
.type(NEW_FEATURE)

View File

@ -16,7 +16,10 @@ import cn.axzo.tyr.client.model.enums.IdentityType;
import cn.axzo.tyr.client.model.enums.PermissionGroupType;
import cn.axzo.tyr.client.model.req.ChangeGroupLeaderRoleReq;
import cn.axzo.tyr.client.model.req.FeatureRoleRelationReq;
import cn.axzo.tyr.client.model.req.ListRoleReq;
import cn.axzo.tyr.client.model.req.ListSaasRoleGroupParam;
import cn.axzo.tyr.client.model.req.PagePgroupPermissionRelationReq;
import cn.axzo.tyr.client.model.req.PageRoleReq;
import cn.axzo.tyr.client.model.req.PageSaasFeatureResourceReq;
import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq;
import cn.axzo.tyr.client.model.req.QueryRoleByNameReq;
@ -28,10 +31,12 @@ import cn.axzo.tyr.client.model.res.FeatureRoleRelationResp;
import cn.axzo.tyr.client.model.res.IsSuperAdminRes;
import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes;
import cn.axzo.tyr.client.model.res.QueryRoleByNameResp;
import cn.axzo.tyr.client.model.res.RoleGroupRelationRes;
import cn.axzo.tyr.client.model.res.RoleWithUserRes;
import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp;
import cn.axzo.tyr.client.model.res.SaasPermissionRelationRes;
import cn.axzo.tyr.client.model.res.SaasPermissionRes;
import cn.axzo.tyr.client.model.res.SaasRoleGroupDTO;
import cn.axzo.tyr.client.model.res.SaasRoleGroupRes;
import cn.axzo.tyr.client.model.res.SaasRoleRes;
import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserV2DTO;
@ -46,11 +51,14 @@ import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO;
import cn.axzo.tyr.server.config.MqProducer;
import cn.axzo.tyr.server.event.payload.RolePermissionCreatedPayload;
import cn.axzo.tyr.server.event.payload.SaasFeatureResourceUpsertPayload;
import cn.axzo.tyr.server.model.RelationOperateLogResourceBindRoleDO;
import cn.axzo.tyr.server.model.RelationOperateLogRoleBindResourceDO;
import cn.axzo.tyr.server.model.ResourcePermission;
import cn.axzo.tyr.server.model.ResourcePermissionQueryDTO;
import cn.axzo.tyr.server.model.RoleFeatureRelation;
import cn.axzo.tyr.server.model.RoleWithFeature;
import cn.axzo.tyr.server.repository.dao.SaasFeatureDao;
import cn.axzo.tyr.server.repository.dao.SaasFeatureResourceDao;
import cn.axzo.tyr.server.repository.dao.SaasPermissionGroupDao;
import cn.axzo.tyr.server.repository.dao.SaasPgroupPermissionRelationDao;
import cn.axzo.tyr.server.repository.dao.SaasPgroupRoleRelationDao;
@ -62,17 +70,22 @@ import cn.axzo.tyr.server.repository.entity.SaasFeature;
import cn.axzo.tyr.server.repository.entity.SaasFeatureResource;
import cn.axzo.tyr.server.repository.entity.SaasPermissionGroup;
import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation;
import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelationOperateLog;
import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation;
import cn.axzo.tyr.server.repository.entity.SaasRole;
import cn.axzo.tyr.server.repository.entity.SaasRoleGroup;
import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation;
import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation;
import cn.axzo.tyr.server.repository.entity.SaasRoleWithUser;
import cn.axzo.tyr.server.model.*;
import cn.axzo.tyr.server.repository.dao.*;
import cn.axzo.tyr.server.repository.entity.*;
import cn.axzo.tyr.server.repository.mapper.SaasRoleMapper;
import cn.axzo.tyr.server.service.*;
import cn.axzo.tyr.server.service.PermissionGroupService;
import cn.axzo.tyr.server.service.RoleService;
import cn.axzo.tyr.server.service.SaasFeatureResourceService;
import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationOperateLogService;
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.SaasRoleUserRelationService;
import cn.axzo.tyr.server.util.RpcInternalUtil;
import cn.azxo.framework.common.constatns.Constants;
import cn.hutool.core.bean.BeanUtil;
@ -191,7 +204,7 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
private String groupLeaderCode;
@Autowired
private final MqProducer mqProducer;
private MqProducer mqProducer;
private static final String TARGET_TYPE = "saasFeatureResourceId";
@ -597,7 +610,7 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
if (StringUtils.isBlank(saveOrUpdateRole.getRoleCode())) {
return;
}
List<SaasRoleRes> oldSaasRoles = this.list(ListSaasRoleParam.builder()
List<SaasRoleRes> oldSaasRoles = this.list(ListRoleReq.builder()
.roleCode(saveOrUpdateRole.getRoleCode())
.idNE(saveOrUpdateRole.getId())
.build());
@ -973,7 +986,12 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
}
saasRoleDao.delete(deleteRoleParam.getRoleIds());
// 未根据id进行更新会存在死锁的风险但是角色的操作频率很低可以先不考虑
// 收口remove接口通过id更新不会出现死锁并补发mq
// 因为角色用户数据量巨大应该是角色删除后发送mq异步解耦去删除相关数据但是得等角色的写接口收口后才能做
saasRoleUserRelationService.listV2(ListRoleUserRelationParam.builder()
.roleIds(deleteRoleParam.getRoleIds())
.build());
roleUserRelationDao.deleteByRoleId(deleteRoleParam.getRoleIds());
roleGroupRelationDao.deleteGroupRelation(deleteRoleParam.getRoleIds());
saasPgroupRoleRelationDao.deleteByRoleId(deleteRoleParam.getRoleIds());
@ -1241,9 +1259,9 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
}
@Override
public List<SaasRoleRes> list(ListSaasRoleParam param) {
public List<SaasRoleRes> list(ListRoleReq param) {
return PageConverter.drainAll(pageNumber -> {
PageSaasRoleParam pageParam = PageSaasRoleParam.builder().build();
PageRoleReq pageParam = PageRoleReq.builder().build();
BeanUtils.copyProperties(param, pageParam);
pageParam.setPage(pageNumber);
pageParam.setPageSize(10000);
@ -1252,7 +1270,7 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
}
@Override
public cn.axzo.foundation.page.PageResp<SaasRoleRes> page(PageSaasRoleParam param) {
public cn.axzo.foundation.page.PageResp<SaasRoleRes> page(PageRoleReq param) {
QueryWrapper<SaasRole> wrapper = QueryWrapperHelper.fromBean(param, SaasRole.class);
wrapper.eq("is_delete", 0);
List<ListRoleUserRelationParam.WorkspaceOuPair> workspaceOuPairs = Lists.newArrayList();
@ -1272,6 +1290,16 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
}
});
}
if (CollectionUtils.isNotEmpty(param.getRoleGroupCodes())) {
Set<Long> roleIds = resolveRoleGroupCodes(param);
if (CollectionUtils.isEmpty(roleIds)) {
return param.toEmpty();
}
wrapper.in(CollectionUtils.isNotEmpty(roleIds), "id", roleIds);
}
IPage<SaasRole> page = this.page(PageConverter.toMybatis(param, SaasRole.class), wrapper);
Map<Long, List<SaasRoleGroupRes>> saasRoleGroups = listRoleGroups(param, page.getRecords());
@ -1291,6 +1319,23 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
permissionRelations));
}
private Set<Long> resolveRoleGroupCodes(PageRoleReq param) {
if (CollectionUtils.isEmpty(param.getRoleGroupCodes())) {
return Collections.emptySet();
}
return saasRoleGroupService.list(ListSaasRoleGroupParam.builder()
.roleGroupCodes(param.getRoleGroupCodes())
.needRoleGroupRelation(true)
.build())
.stream()
.map(SaasRoleGroupDTO::getRoleGroupRelations)
.filter(Objects::nonNull)
.flatMap(Collection::stream)
.map(RoleGroupRelationRes::getRoleId)
.collect(Collectors.toSet());
}
private SaasRoleRes from(SaasRole saasRole,
Map<Long, List<SaasRoleGroupRes>> saasRoleGroups,
Map<Long, List<SaasPermissionRes>> saasPermissions,
@ -1305,7 +1350,7 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
return saasRoleRes;
}
private Map<Long, List<SaasPermissionRes>> listRolePermissions(PageSaasRoleParam param,
private Map<Long, List<SaasPermissionRes>> listRolePermissions(PageRoleReq param,
List<SaasRole> saasRoles) {
if (CollectionUtils.isEmpty(saasRoles) || BooleanUtils.isNotTrue(param.getNeedPermission())) {
return Collections.emptyMap();
@ -1389,7 +1434,7 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
}
}
private Map<Long, List<SaasRoleGroupRes>> listRoleGroups(PageSaasRoleParam param,
private Map<Long, List<SaasRoleGroupRes>> listRoleGroups(PageRoleReq param,
List<SaasRole> saasRoles) {
if (CollectionUtils.isEmpty(saasRoles) || BooleanUtils.isNotTrue(param.getNeedRoleGroup())) {
return Collections.emptyMap();
@ -1580,7 +1625,7 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
return resourcePermissions;
}
private Map<Long, List<SaasRoleUserV2DTO.SaasRoleUser>> listSaasRoleUser(PageSaasRoleParam param,
private Map<Long, List<SaasRoleUserV2DTO.SaasRoleUser>> listSaasRoleUser(PageRoleReq param,
List<SaasRole> saasRoles) {
if (CollectionUtils.isEmpty(saasRoles) || BooleanUtils.isNotTrue(param.getNeedRoleUser())) {
return Collections.emptyMap();
@ -1605,7 +1650,7 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
* @param saasRoles
* @return
*/
private Map<Long, List<SaasPermissionRes>> listRolePermissionsOld(PageSaasRoleParam param,
private Map<Long, List<SaasPermissionRes>> listRolePermissionsOld(PageRoleReq param,
List<SaasRole> saasRoles) {
if (CollectionUtils.isEmpty(saasRoles) || BooleanUtils.isNotTrue(param.getNeedPermissionOld())) {
return Collections.emptyMap();
@ -1663,7 +1708,7 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
Collectors.toList())));
}
private Map<Long, List<SaasPermissionRelationRes>> listRolePermissionRelations(PageSaasRoleParam param,
private Map<Long, List<SaasPermissionRelationRes>> listRolePermissionRelations(PageRoleReq param,
List<SaasRole> saasRoles) {
if (CollectionUtils.isEmpty(saasRoles) || BooleanUtils.isNotTrue(param.getNeedPermissionRelation())) {
return Collections.emptyMap();

View File

@ -8,11 +8,13 @@ import cn.axzo.foundation.exception.Axssert;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import cn.axzo.tyr.client.common.enums.PermissionRelationOperateLogSceneEnum;
import cn.axzo.tyr.client.model.req.ListRoleReq;
import cn.axzo.tyr.client.model.req.ListSaasRoleGroupParam;
import cn.axzo.tyr.client.model.req.PageSaasRoleGroupParam;
import cn.axzo.tyr.client.model.req.PermissionOperateLogReq;
import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq;
import cn.axzo.tyr.client.model.req.SaasRoleGroupDeleteRequest;
import cn.axzo.tyr.client.model.res.RoleGroupRelationRes;
import cn.axzo.tyr.client.model.res.SaasRoleGroupDTO;
import cn.axzo.tyr.client.model.res.SaasRoleRes;
import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO;
@ -371,15 +373,20 @@ public class SaasRoleGroupServiceImpl extends ServiceImpl<SaasRoleGroupMapper, S
Map<Long, List<SaasRoleRes>> roles = listRoles(param, page.getRecords());
return PageConverter.toResp(page, (record) -> from(record, roles));
Map<Long, List<RoleGroupRelationRes>> roleGroupRelations = listRoleGroupRelations(param, page.getRecords());
return PageConverter.toResp(page, (record) -> from(record, roles, roleGroupRelations));
}
private SaasRoleGroupDTO from(SaasRoleGroup saasRoleGroup,
Map<Long, List<SaasRoleRes>> roles) {
Map<Long, List<SaasRoleRes>> roles,
Map<Long, List<RoleGroupRelationRes>> roleGroupRelations) {
SaasRoleGroupDTO saasRoleGroupDTO = SaasRoleGroupDTO.builder().build();
BeanUtils.copyProperties(saasRoleGroup, saasRoleGroupDTO);
saasRoleGroupDTO.setSaasRoles(roles.get(saasRoleGroupDTO.getId()));
saasRoleGroupDTO.setRoleGroupRelations(roleGroupRelations.get(saasRoleGroupDTO.getId()));
return saasRoleGroupDTO;
}
@ -398,7 +405,7 @@ public class SaasRoleGroupServiceImpl extends ServiceImpl<SaasRoleGroupMapper, S
if (CollectionUtils.isEmpty(roleIds)) {
return Collections.emptyMap();
}
RoleService.ListSaasRoleParam listSaasRoleParam = RoleService.ListSaasRoleParam.builder().build();
ListRoleReq listSaasRoleParam = ListRoleReq.builder().build();
listSaasRoleParam.setRoleIds(roleIds);
Map<Long, SaasRoleRes> roles = roleService.list(listSaasRoleParam).stream()
.collect(Collectors.toMap(SaasRoleRes::getId, Function.identity()));
@ -408,4 +415,23 @@ public class SaasRoleGroupServiceImpl extends ServiceImpl<SaasRoleGroupMapper, S
LinkedHashMap::new,
Collectors.mapping(e -> roles.get(e.getRoleId()), Collectors.toList())));
}
private Map<Long, List<RoleGroupRelationRes>> listRoleGroupRelations(PageSaasRoleGroupParam param,
List<SaasRoleGroup> saasRoleGroups) {
if (CollectionUtils.isEmpty(saasRoleGroups) || BooleanUtils.isNotTrue(param.getNeedRoleGroupRelation())) {
return Collections.emptyMap();
}
SaasRoleGroupRelationService.ListSaasRoleGroupRelationParam listSaasRoleGroupRelationParam = SaasRoleGroupRelationService.ListSaasRoleGroupRelationParam.builder().build();
listSaasRoleGroupRelationParam.setSaasRoleGroupIds(Lists.transform(saasRoleGroups, SaasRoleGroup::getId));
return saasRoleGroupRelationService.list(listSaasRoleGroupRelationParam)
.stream()
.map(e -> {
RoleGroupRelationRes roleGroupRelationRes = RoleGroupRelationRes.builder().build();
BeanUtils.copyProperties(e, roleGroupRelationRes);
return roleGroupRelationRes;
})
.collect(Collectors.groupingBy(RoleGroupRelationRes::getSaasRoleGroupId));
}
}

View File

@ -8,6 +8,7 @@ import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper;
import cn.axzo.foundation.exception.Axssert;
import cn.axzo.framework.rocketmq.Event;
import cn.axzo.log.platform.client.LogPlatClient;
import cn.axzo.tyr.client.model.req.ListRoleReq;
import cn.axzo.tyr.client.model.res.SaasRoleRes;
import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserV2DTO;
import cn.axzo.tyr.client.model.roleuser.req.ListRoleUserRelationParam;
@ -109,7 +110,7 @@ public class SaasRoleUserRelationServiceImpl extends ServiceImpl<SaasRoleUserRel
@Override
@Transactional
public void upsert(List<SaasRoleUserRelation> saasRoleUserRelations) {
public void upsert(UpsertParam param) {
}
@ -149,7 +150,7 @@ public class SaasRoleUserRelationServiceImpl extends ServiceImpl<SaasRoleUserRel
.map(Sets::newHashSet)
.orElseGet(Sets::newHashSet);
}
RoleService.ListSaasRoleParam listSaasRoleParam = RoleService.ListSaasRoleParam.builder()
ListRoleReq listSaasRoleParam = ListRoleReq.builder()
.roleCodes(param.getRoleCodes())
.build();
Set<Long> roleIds = roleService.list(listSaasRoleParam).stream()
@ -237,7 +238,7 @@ public class SaasRoleUserRelationServiceImpl extends ServiceImpl<SaasRoleUserRel
.distinct()
.collect(Collectors.toList());
RoleService.ListSaasRoleParam listSaasRoleParam = RoleService.ListSaasRoleParam.builder()
ListRoleReq listSaasRoleParam = ListRoleReq.builder()
.roleIds(roleIds)
.needPermissionOld(param.getNeedRolePermissionOld())
.featureIds(param.getFeatureIds())

View File

@ -20,6 +20,7 @@ import cn.axzo.tyr.client.model.req.ListIdentityFromPermissionReq;
import cn.axzo.tyr.client.model.req.ListPermissionFromFeatureReq;
import cn.axzo.tyr.client.model.req.ListPermissionFromIdentityReq;
import cn.axzo.tyr.client.model.req.ListPermissionFromRoleGroupReq;
import cn.axzo.tyr.client.model.req.ListRoleReq;
import cn.axzo.tyr.client.model.req.OUWorkspacePair;
import cn.axzo.tyr.client.model.req.PageElementFeatureResourceRelationReq;
import cn.axzo.tyr.client.model.req.PagePgroupPermissionRelationReq;
@ -562,7 +563,7 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService {
private List<SaasRoleRes> listAdminRole(ListPermissionUser req) {
//超管和管理员
RoleService.ListSaasRoleParam listSaasRoleParam = RoleService.ListSaasRoleParam.builder()
ListRoleReq listSaasRoleParam = ListRoleReq.builder()
.workspaceId(req.getWorkspaceId())
.ouId(req.getOuId())
.roleTypes(Lists.newArrayList(RoleTypeEnum.SUPER_ADMIN.getValue(), RoleTypeEnum.ADMIN.getValue()))
@ -610,7 +611,7 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService {
|| e.getValue().stream().anyMatch(p -> Objects.equals(p.getTerminal(), req.getTerminal())))
.map(Map.Entry::getKey)
.collect(Collectors.toSet());
Map<Long, SaasRoleRes> normalRoles = roleService.list(RoleService.ListSaasRoleParam.builder()
Map<Long, SaasRoleRes> normalRoles = roleService.list(ListRoleReq.builder()
.roleIds(Lists.newArrayList(normalRoleIds))
.build())
.stream()
@ -903,7 +904,7 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService {
public Map<Long, Set<ListPermissionFromRoleGroupResp.FeatureInfo>> filterAuthByRoleAndProduct(List<FilterRoleAuth> filterRoleAuths) {
Set<Long> roleIds = filterRoleAuths.stream().map(FilterRoleAuth::getRoleId).collect(Collectors.toSet());
RoleService.ListSaasRoleParam listSaasRoleParam = RoleService.ListSaasRoleParam.builder()
ListRoleReq listSaasRoleParam = ListRoleReq.builder()
.roleIds(Lists.newArrayList(roleIds))
.build();
Map<Long, SaasRoleRes> roles = roleService.list(listSaasRoleParam).stream()
@ -1042,7 +1043,7 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService {
return Collections.emptyList();
}
return roleService.list(RoleService.ListSaasRoleParam.builder()
return roleService.list(ListRoleReq.builder()
.roleIds(Lists.transform(saasPgroupRoleRelations, SaasPgroupRoleRelation::getRoleId))
.build())
.stream()
@ -1422,7 +1423,7 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService {
}
private List<SaasRoleUserV2DTO> mockRoleUserRelationV2(IdentityAuthReq identityAuthReq) {
RoleService.ListSaasRoleParam listSaasRoleParam = RoleService.ListSaasRoleParam.builder()
ListRoleReq listSaasRoleParam = ListRoleReq.builder()
.roleIds(Lists.newArrayList(identityAuthReq.getSpecifyRoleIds()))
.build();
Map<Long, SaasRoleRes> saasRoles = roleService.list(listSaasRoleParam).stream()
@ -1857,7 +1858,7 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService {
owRoleIdMap.put(key, owRoleIds);
}
//获取角色和关联权限信息
RoleService.ListSaasRoleParam listSaasRoleParam = RoleService.ListSaasRoleParam.builder()
ListRoleReq listSaasRoleParam = ListRoleReq.builder()
.roleIds(Lists.newArrayList(roleIds))
.needPermissionRelation(true)
.build();

View File

@ -1,12 +1,20 @@
package cn.axzo.tyr.server.service;
import cn.axzo.tyr.base.BaseTest;
import cn.axzo.tyr.base.MysqlDataLoader;
import cn.axzo.tyr.client.model.req.ListRoleReq;
import cn.axzo.tyr.client.model.res.SaasRoleRes;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.MockitoAnnotations;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.*;
@ -15,9 +23,54 @@ class RoleServiceTest extends BaseTest {
@Autowired
private RoleService roleService;
@Autowired
private MysqlDataLoader mysqlDataLoader;
@BeforeEach
@Override
public void setup() {
super.setup();
mysqlDataLoader.loadFromClassName(getClass().getSimpleName());
}
@Test
void list() {
List<SaasRoleRes> roles = roleService.list(ListRoleReq.builder()
.roleIds(Lists.newArrayList(24425L, 25324L))
.build());
Assertions.assertEquals(roles.size(), 2);
roles = roleService.list(ListRoleReq.builder()
.roleGroupCodes(Sets.newHashSet("A1"))
.build());
Assertions.assertEquals(roles.size(), 1);
roles = roleService.list(ListRoleReq.builder()
.roleGroupCodes(Sets.newHashSet("A2"))
.build());
Assertions.assertEquals(roles.size(), 3);
roles = roleService.list(ListRoleReq.builder()
.roleGroupCodes(Sets.newHashSet("A1", "A2"))
.build());
Assertions.assertEquals(roles.size(), 4);
roles = roleService.list(ListRoleReq.builder()
.roleGroupCodes(Sets.newHashSet("A3"))
.build());
Assertions.assertEquals(roles.size(), 0);
roles = roleService.list(ListRoleReq.builder()
.roleGroupCodes(Sets.newHashSet("A1", "A2"))
.roleIds(Lists.newArrayList(111L, 222L))
.build());
Assertions.assertEquals(roles.size(), 0);
roles = roleService.list(ListRoleReq.builder()
.roleGroupCodes(Sets.newHashSet("A1", "A2"))
.roleIds(Lists.newArrayList(24425L, 25324L))
.build());
Assertions.assertEquals(roles.size(), 2);
}
}

View File

@ -0,0 +1,16 @@
#-->DEFAULT
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 (24425, '项目经理', '', 'init', '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 (25324, '项目负责人', '', 'init', '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 (25326, '商务副经理', '', '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 (25327, '生产副经理', '', '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);
INSERT INTO saas_role_group_relation (id, role_id, saas_role_group_id, is_delete, create_at, update_at) VALUES (12, 24425, 6, 0, '2023-09-19 15:22:55', '2023-09-19 15:22:55');
INSERT INTO saas_role_group_relation (id, role_id, saas_role_group_id, is_delete, create_at, update_at) VALUES (23, 25324, 13, 0, '2023-10-23 17:49:59', '2023-10-23 17:49:58');
INSERT INTO saas_role_group_relation (id, role_id, saas_role_group_id, is_delete, create_at, update_at) VALUES (25, 25326, 13, 0, '2023-10-23 17:50:00', '2023-10-23 17:49:59');
INSERT INTO saas_role_group_relation (id, role_id, saas_role_group_id, is_delete, create_at, update_at) VALUES (26, 25327, 13, 0, '2023-10-23 17:50:00', '2023-10-23 17:49:59');
INSERT INTO saas_role_group (id, workspace_type_code, ou_type_code, name, workspace_id, ou_id, parent_id, sort, code, category_code, is_delete, create_at, update_at) VALUES (6, '6', '6', '研发中心', -1, -1, 0, 3, 'A1', '', 0, '2023-09-19 14:31:19', '2024-05-29 09:33:24');
INSERT INTO saas_role_group (id, workspace_type_code, ou_type_code, name, workspace_id, ou_id, parent_id, sort, code, category_code, is_delete, create_at, update_at) VALUES (13, '2', '5', '专业分包', -1, -1, 0, 1, 'A2', '', 0, '2023-10-23 17:49:59', '2024-08-15 18:39:13');
#-->SaasRoleUserRelationServiceImplTest.sql

View File

@ -17,6 +17,41 @@ CREATE TABLE `demo` (
UNIQUE KEY `uk_demo_code` (`code`)
) COMMENT ='demo';
CREATE TABLE `saas_role_group_relation` (
`id` bigint NOT NULL AUTO_INCREMENT,
`role_id` bigint DEFAULT NULL COMMENT '角色id',
`saas_role_group_id` bigint DEFAULT NULL COMMENT '角色分组id',
`is_delete` bigint DEFAULT '0' COMMENT '是否删除 0否,其他是',
`create_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_role_group_relation_create_at` (`create_at`),
KEY `idx_role_group_relation_update_at` (`update_at`),
KEY `idx_role_group_saas_role_group_id` (`saas_role_group_id`),
KEY `idx_role_group_relation_role_id` (`role_id`)
) ENGINE=InnoDB AUTO_INCREMENT=345 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='角色分组关联表';
CREATE TABLE `saas_role_group` (
`id` bigint NOT NULL AUTO_INCREMENT,
`workspace_type_code` varchar(255) DEFAULT NULL COMMENT '工作台类型字典id',
`ou_type_code` varchar(255) DEFAULT NULL COMMENT '单位类型字典id(多选集合)',
`name` varchar(255) DEFAULT NULL COMMENT '名称',
`workspace_id` bigint DEFAULT NULL COMMENT '所属工作台id(通用-1)',
`ou_id` bigint DEFAULT NULL COMMENT '所属单位id(通用-1)',
`parent_id` bigint NOT NULL DEFAULT '0' COMMENT '上级分组ID',
`sort` int DEFAULT NULL COMMENT '排序',
`code` varchar(50) NOT NULL DEFAULT '' COMMENT '分组CODE',
`category_code` varchar(50) NOT NULL DEFAULT '' COMMENT '分类CODE, 用于代班长,小组长的权限分类。',
`is_delete` bigint DEFAULT '0' COMMENT '是否删除 0否,其他是',
`create_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_role_group_create_at` (`create_at`),
KEY `idx_role_group_update_at` (`update_at`),
KEY `idx_role_group_idx_workspace_type_code` (`workspace_type_code`),
KEY `idx_role_group_workspace_id` (`workspace_id`),
KEY `idx_role_group_ou_id` (`ou_id`)
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='角色分组';
CREATE TABLE `saas_feature` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
@ -263,7 +298,7 @@ CREATE TABLE `permission_rule` (
`key_code` varchar(128) NOT NULL COMMENT '规则编码',
`type` varchar(64) NOT NULL COMMENT '规则类型:CREATE_ROLE_CHECK:check创建角色',
-- `content` JSON NULL COMMENT 'pipeline信息{"pipelines":[{"pipeline":"","params":{}}]}',
`content` VARCHAR(2048) NOT NULL DEFAULT '{}' COMMENT 'pipeline信息{"pipelines":[{"pipeline":"实现规则类实例名字","params":{执行规则的默认参数}}]}',
`content` VARCHAR(2048) NOT NULL DEFAULT '{}' COMMENT 'pipeline信息{"pipelines":[{"pipeline":"实现规则类实例名字","params":{执行规则的默认参数},"processor":"执行规则的引擎:groovy、java"}]}',
`status` varchar(32) NOT NULL DEFAULT 'ENABLED' COMMENT '状态ENABLED、DISABLED',
`description` varchar(512) NOT NULL DEFAULT '' COMMENT '规则的描述',
-- `ext` JSON NULL COMMENT '额外信息',