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

This commit is contained in:
chenwenjian 2023-09-15 09:59:47 +08:00
commit 70777f0e99
59 changed files with 1040 additions and 382 deletions

View File

@ -0,0 +1,7 @@
client.test("request executed successful", function () {
client.assert(response.status == 200, "Response status is not 200")
});
client.test("response body status successful", function () {
client.assert(response.body.code == 0, "Response body code is not 0")
});

View File

@ -0,0 +1,8 @@
{
"local": {
"host": "http://localhost:8080"
},
"dev": {
"host": "https://dev-app.axzo.cn/msg-center/webApi/message/"
}
}

View File

@ -0,0 +1,13 @@
###
POST {{host}}/api/saas-role-user/list
Accept: application/json
Content-Type: application/json
{
}
> reponse-check.js

View File

@ -1,8 +1,7 @@
package cn.axzo.tyr.server.common.enums;
package cn.axzo.tyr.client.common.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import java.util.Arrays;

View File

@ -3,7 +3,9 @@ package cn.axzo.tyr.client.feign;
import cn.axzo.framework.domain.web.result.ApiPageResult;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq;
import cn.axzo.tyr.client.model.vo.DeletePermissionGroupVO;
import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO;
import cn.axzo.tyr.client.model.vo.SaveOrUpdatePermissionGroupVO;
import cn.axzo.tyr.client.model.vo.SavePermissionGroupPPVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
@ -20,10 +22,10 @@ import java.util.List;
public interface SaasPermissionGroupApi {
/**
* 保存/更新
* 保存/更新 例外
*/
@PostMapping("/api/saasPermissionGoup/saveOrUpdate")
ApiResult<Void> saveOrUpdate(@RequestBody SaasPermissionGroupVO req);
@PostMapping("/api/saasPermissionGoup/saveOrUpdateSpecial")
ApiResult<Long> saveOrUpdateSpecial(@RequestBody @Valid SaveOrUpdatePermissionGroupVO permissionGroup);
/**
* 根据id查询详情
@ -47,4 +49,7 @@ public interface SaasPermissionGroupApi {
@PostMapping("/api/saasPermissionGoup/savePermissionPoints")
ApiResult<Void> savePermissionPoints(@RequestBody@Valid SavePermissionGroupPPVO save);
@PostMapping("/api/saasPermissionGoup/deletePermissionGroupSpecial")
ApiResult<Void> deletePermissionGroupSpecial(@RequestBody @Valid DeletePermissionGroupVO group);
}

View File

@ -8,6 +8,7 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import javax.validation.constraints.NotEmpty;
import java.util.List;
/**
@ -21,7 +22,7 @@ public interface SaasRoleGroupApi {
* @return
*/
@PostMapping("/api/saasRoleGroup/save")
ApiResult saveOrUpdate(@RequestBody SaasRoleGroupVO req);
ApiResult<Long> saveOrUpdate(@RequestBody SaasRoleGroupVO req);
/**
* 获取权限分组列表
@ -37,7 +38,6 @@ public interface SaasRoleGroupApi {
* 删除
*/
@PostMapping("/api/saasRoleGroup//api/saasPermissionGoup/delete")
ApiResult delete(@RequestBody List<Long> id);
ApiResult<Void> delete(@RequestBody@NotEmpty List<Long> ids);
}

View File

@ -7,6 +7,7 @@ import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes;
import cn.axzo.tyr.client.model.vo.SaasRoleVO;
import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@ -27,7 +28,7 @@ public interface TyrSaasRoleApi {
* 如果权限列表不为空则创建通用权限
*/
@PostMapping("/api/saasRole/saveOrUpdate")
ApiResult<Long> saveOrUpdate(@RequestBody SaveOrUpdateRoleVO saveOrUpdateRole);
ApiResult<Long> saveOrUpdate(@RequestBody @Validated SaveOrUpdateRoleVO saveOrUpdateRole);
/**
* 根据id查询详情

View File

@ -1,12 +1,15 @@
package cn.axzo.tyr.client.feign;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserRelationDTO;
import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam;
import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import javax.validation.Valid;
import java.util.List;
/**
* 角色
@ -20,6 +23,12 @@ public interface TyrSaasRoleUserApi {
@PostMapping("/api/saas-role-user/save-or-update")
ApiResult<Void> saveOrUpdate(@RequestBody @Valid RoleUserReq req);
/**
* 用户角色列表 限制1000条
* @param param
* @return
*/
@PostMapping("/api/saas-role-user/list")
ApiResult<List<SaasRoleUserRelationDTO>> roleUserList(@RequestBody @Valid RoleUserParam param);
}

View File

@ -0,0 +1,29 @@
package cn.axzo.tyr.client.model.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.HashMap;
import java.util.Map;
@Getter
@AllArgsConstructor
public enum PermissionType {
FEATURE("feature", "功能"),
DATA("data", "数据"),
;
private String code;
private String desc;
private static final Map<String, PermissionType> MAPPING = new HashMap<>();
static {
for (PermissionType type : PermissionType.values()) {
MAPPING.put(type.code, type);
}
}
public static PermissionType apply(Integer code) {
return code == null ? null :MAPPING.get(code);
}
}

View File

@ -18,12 +18,12 @@ public class QuerySaasRoleGroupReq {
/**
* 项目部id(不传或者传-1查询的是标准分组)
*/
private Long workspaceId;
private List<Long> workspaceIds;
/**
* 单位id(不传或者传-1查询的是标准分组)
*/
private Long ouId;
private List<Long> ouIds;
/**
* 工作台类型字典code

View File

@ -0,0 +1,71 @@
package cn.axzo.tyr.client.model.roleuser.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author haiyangjin
* @date 2023/9/14
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class SaasRoleUserRelationDTO {
/**
* 主键ID
*/
private Long id;
/**
* 身份Id
*/
private Long identityId;
/**
* 身份类型 1:工人 2:从业人员 3:班组长 4:运营人员 5:政务人员
*/
private Integer identityType;
/**
* 角色Id
*/
private Long roleId;
/**
* 自然人Id
*/
private Long naturalPersonId;
/**
* 创建者
*/
private Long createBy;
/**
* 更新者
*/
private Long updateBy;
/**
* 所属单位Id 用户在当前工作台的所属单位
*/
private Long ouId;
/**
* 工作台Id
*/
private Long workspaceId;
/**
* 资源类型
*/
private Integer resourceType;
/**
* 资源Id
*/
private Long resourceId;
}

View File

@ -0,0 +1,53 @@
package cn.axzo.tyr.client.model.roleuser.req;
import cn.axzo.tyr.client.model.enums.IdentityType;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Set;
/**
* @author haiyangjin
* @date 2023/9/14
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class RoleUserParam {
/**
* 工作台id
*/
private Long workspaceId;
/**
* 单位id
*/
private Long ouId;
/**
* personId
*/
private Long personId;
/**
* 身份id
* 传身份id的时候请带上身份类型 身份id会重复
*/
private Long identityId;
/**
* 身份类型
*/
private IdentityType identityType;
/**
* role ids
*/
private Set<Long> roleIds;
}

View File

@ -47,6 +47,7 @@ public class RoleUserReq {
*/
@NotNull
private IdentityType identityType;
/**
* 完整的update所有RoleId都被更新
*/

View File

@ -0,0 +1,27 @@
package cn.axzo.tyr.client.model.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class DeletePermissionGroupVO {
@NotNull
private Long roleId;
@NotEmpty
private List<Long> specialPermissionGroupIds;
@NotNull
private Long operatorId;
private String operatorName;
}

View File

@ -36,6 +36,16 @@ public class SaasRoleGroupVO {
*/
private List<Long> roleIds;
/**
* 工作台id(自定义时传入)
*/
private Long workspaceId;
/**
* 单位id(自定义时传入)
*/
private Long ouId;
/**
* 排序
*/

View File

@ -1,13 +1,20 @@
package cn.axzo.tyr.client.model.vo;
import cn.axzo.trade.datasecurity.core.annotation.control.DisableCrypt;
import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode;
import cn.hutool.core.collection.CollectionUtil;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
@Data
@ -16,47 +23,118 @@ import java.util.stream.Collectors;
@Builder
public class SaasRoleVO {
private Long id;
private Long id;
/**
* 角色名称
*/
private String name;
/**
* 角色名称
*/
private String name;
/**
* 角色类型common 普通角色 admin管理员
*/
private String roleType;
/**
* 角色类型 init 标准 common 自定义角色 admin管理员 super_admin 超管
*/
private String roleType;
/**
* 创建者
*/
private Long createBy;
/**
* 创建者
*/
private Long createBy;
/**
* 更新者
*/
private Long updateBy;
/**
* 更新者
*/
private Long updateBy;
/**
* 权限组
*/
private List<SaasPermissionGroupVO> permissionGroup;
/**
* 权限组
*/
private List<SaasPermissionGroupVO> permissionGroup;
/**
* 是否删除
*/
private Long isDelete;
/**
* 是否删除
*/
private Long isDelete;
private Date createAt;
private Date createAt;
private Date updateAt;
private Date updateAt;
/**
* 获取角色对应所用的权限
* @return
*/
public List<PermissionPointTreeNode> getFeature(){
return this.permissionGroup.stream().map(SaasPermissionGroupVO::getFeature).flatMap(List::stream).distinct().collect(Collectors.toList());
}
/**
* 获取角色对应所用的菜单不管例外
*
* @return
*/
public List<PermissionPointTreeNode> getFeature() {
return this.permissionGroup.stream().map(SaasPermissionGroupVO::getFeature).flatMap(List::stream).distinct().collect(Collectors.toList());
}
/**
* 获取角色基于单位ID和工作台ID所匹配的所以菜单包括通用和例外
* @param workspaceId
* @param ouId
* @return
*/
public List<PermissionPointTreeNode> getMatchFeature (Long workspaceId, Long ouId) {
Set<PermissionPointTreeNode> permissionPoint = new HashSet<>();
//例外
group:
for (SaasPermissionGroupVO permissionGroupVO : permissionGroup) {
// 通用权限
if (CollectionUtil.isEmpty(permissionGroupVO.getScopes())) {
permissionPoint.addAll(permissionGroupVO.getFeature());
}
List<SaasRolePermissionScopeVO> scopes = permissionGroupVO.getScopes();
scope:
for (SaasRolePermissionScopeVO scope : scopes) {
//正选
if (Objects.equals(scope.getType(), 1)) {
// 判断是否与当前工作台或者单位ID匹配
if (scope.getScopeType().equals("workspace")
&& match(true, permissionPoint, permissionGroupVO.getFeature(), scope.getScopeId(), workspaceId)) {
continue group;
}
if (scope.getScopeType().equals("ou")
&& match(true, permissionPoint, permissionGroupVO.getFeature(), scope.getScopeId(), ouId)
) {
continue group;
}
//反选
} else if (Objects.equals(scope.getType(), 2)) {
// 判断是否与当前工作台或者单位ID匹配
if (scope.getScopeType().equals("workspace")
&& match(false, permissionPoint, permissionGroupVO.getFeature(), scope.getScopeId(), workspaceId)
/* && !Objects.equals(scope.getScopeId(), workspaceId)
&& permissionPoint.addAll(permissionGroupVO.getFeature())*/) {
continue group;
}
if (scope.getScopeType().equals("ou")
&& match(false, permissionPoint, permissionGroupVO.getFeature(), scope.getScopeId(), ouId)
/* && !Objects.equals(scope.getScopeId(), ouId)
&& permissionPoint.addAll(permissionGroupVO.getFeature())*/) {
continue group;
}
}
}
}
return new ArrayList<>((Collection) permissionPoint);
}
private boolean match(boolean isMatch, Set<PermissionPointTreeNode> source, Collection<PermissionPointTreeNode> target, Long scopeId, Long workspaceId) {
if (isMatch && scopeId.equals(workspaceId)) {
source.addAll(target);
return true;
} else if (!isMatch && !Objects.equals(scopeId, workspaceId)) {
source.addAll(target);
return true;
}
return false;
}
}

View File

@ -0,0 +1,62 @@
package cn.axzo.tyr.client.model.vo;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
public class SaveOrUpdatePermissionGroupVO {
/**
* 权限集id(例外)
*/
private Long id;
@NotNull
private Long roleId;
/**
* 权限集名称
*/
@NotBlank
private String name;
private String description;
@NotNull
private Long operatorId;
private String operatorName;
@NotNull
private String type;
/**
* 已选择的项目部
*/
@Valid
private List<PermissionGroupScopeVO> selectedWorkspace;
/**
* 已选择的单位
*/
@Valid
private List<PermissionGroupScopeVO> selectedOu;
@Data
public static class PermissionGroupScopeVO {
/**
* 选择类型 1:正选(指定组织适用) 2:反选(指定组织不适用)
*/
@NotNull
private Integer type;
/**
* 作为范围id(workspaceId/ouId)
*/
@NotNull
private Long scopeId;
}
}

View File

@ -79,6 +79,6 @@ public class SaveOrUpdateRoleVO {
* 项目部类型字典code
*/
@NotNull
private Long workspaceTypeCode;
private String workspaceTypeCode;
}
}

View File

@ -12,8 +12,8 @@ public class PermissionConstant {
/** 权限点path分隔符 **/
public static final String FEATURE_PATH_DELIMITER = "/";
/** 无父级 **/
public static final String FEATURE_NO_PARENT = "0";
/** 无父级的parent_business_no **/
public static final String FEATURE_TOP_BIZ_NO = "0";
/** 顶级path **/
public static final String FEATURE_TOP_PATH = "/0/";
/** 权限点business_no前缀 **/

View File

@ -7,11 +7,13 @@ import cn.axzo.framework.domain.web.result.ApiPageResult;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.tyr.client.feign.SaasPermissionGroupApi;
import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq;
import cn.axzo.tyr.client.model.vo.DeletePermissionGroupVO;
import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO;
import cn.axzo.tyr.client.model.vo.SaveOrUpdatePermissionGroupVO;
import cn.axzo.tyr.client.model.vo.SavePermissionGroupPPVO;
import cn.axzo.tyr.server.repository.service.SaasPermissionGroupDao;
import cn.axzo.tyr.server.repository.service.SaasPermissionGroupScopeDao;
import cn.axzo.tyr.server.repository.service.SaasPgroupPermissionRelationDao;
import cn.axzo.tyr.server.repository.dao.SaasPermissionGroupDao;
import cn.axzo.tyr.server.repository.dao.SaasPermissionGroupScopeDao;
import cn.axzo.tyr.server.repository.dao.SaasPgroupPermissionRelationDao;
import cn.axzo.tyr.server.service.PermissionGroupService;
import com.google.common.collect.Lists;
import lombok.RequiredArgsConstructor;
@ -33,8 +35,8 @@ public class SaasPermissionGroupController implements SaasPermissionGroupApi {
private final PermissionGroupService permissionGroupService;
@Override
public ApiResult<Void> saveOrUpdate(SaasPermissionGroupVO req) {
return null;
public ApiResult<Long> saveOrUpdateSpecial(SaveOrUpdatePermissionGroupVO permissionGroup) {
return ApiResult.ok(permissionGroupService.saveOrUpdateScope(permissionGroup));
}
@Override
@ -69,4 +71,10 @@ public class SaasPermissionGroupController implements SaasPermissionGroupApi {
return ApiResult.ok();
}
@Override
public ApiResult<Void> deletePermissionGroupSpecial(DeletePermissionGroupVO group) {
permissionGroupService.deletePermissionGroupSpecial(group);
return ApiResult.ok();
}
}

View File

@ -23,9 +23,8 @@ public class SaasRoleGroupController implements SaasRoleGroupApi {
private final SaasRoleGroupService saasRoleGroupService;
@Override
public ApiResult saveOrUpdate(SaasRoleGroupVO req) {
saasRoleGroupService.saveOrUpdate(req);
return ApiResult.ok();
public ApiResult<Long> saveOrUpdate(SaasRoleGroupVO req) {
return ApiResult.ok(saasRoleGroupService.saveOrUpdate(req));
}
@Override
@ -43,8 +42,8 @@ public class SaasRoleGroupController implements SaasRoleGroupApi {
}
@Override
public ApiResult delete(List<Long> id) {
public ApiResult<Void> delete(List<Long> ids) {
saasRoleGroupService.delete(ids);
return ApiResult.ok();
}
}

View File

@ -2,14 +2,18 @@ package cn.axzo.tyr.server.controller.roleuser;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.tyr.client.feign.TyrSaasRoleUserApi;
import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserRelationDTO;
import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam;
import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq;
import cn.axzo.tyr.server.repository.service.SaasRoleUserRelationDao;
import cn.axzo.tyr.server.service.SaasRoleUserRelationService;
import cn.axzo.tyr.server.service.SaasRoleUserService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import java.util.List;
/**
* @author tanjie@axzo.cn
@ -20,10 +24,16 @@ import javax.validation.Valid;
@RequiredArgsConstructor
public class RoleUserController implements TyrSaasRoleUserApi {
private final SaasRoleUserService saasRoleUserService;
private final SaasRoleUserRelationService saasRoleUserRelationService;
@Override
public ApiResult<Void> saveOrUpdate(@Valid RoleUserReq req) {
saasRoleUserService.saveOrUpdate(req);
return ApiResult.ok();
}
@Override
public ApiResult<List<SaasRoleUserRelationDTO>> roleUserList(@RequestBody @Valid RoleUserParam param) {
return ApiResult.ok(saasRoleUserRelationService.list(param));
}
}

View File

@ -2,7 +2,7 @@ package cn.axzo.tyr.server.job;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import cn.axzo.tyr.server.repository.entity.*;
import cn.axzo.tyr.server.repository.service.*;
import cn.axzo.tyr.server.repository.dao.*;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.XxlJob;
@ -76,12 +76,6 @@ public class OMSRoleJobHandler extends IJobHandler {
oldRole.forEach(e -> {
e.setWorkspaceId(-1l);
e.setOwnerOuId(-1l);
e.setFitOuTypeBit(-1);
e.setFitOuNodeTypeBit(-1);
e.setPositionTemplateId(-1l);
e.setProjectTeamManageRoleResourceId(-1l);
e.setFromPreRoleId(-1l);
e.setJobCode("");
});
roleDao.updateBatchById(oldRole);
// 保存角色分组关联关系

View File

@ -1,9 +1,8 @@
package cn.axzo.tyr.server.repository.service;
package cn.axzo.tyr.server.repository.dao;
import cn.axzo.tyr.server.repository.entity.ProductModule;
import cn.axzo.tyr.server.repository.mapper.ProductModuleMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
/**

View File

@ -1,4 +1,4 @@
package cn.axzo.tyr.server.repository.service;
package cn.axzo.tyr.server.repository.dao;
import cn.axzo.tyr.server.repository.entity.SaasFeature;
import com.baomidou.mybatisplus.extension.service.IService;

View File

@ -1,4 +1,4 @@
package cn.axzo.tyr.server.repository.service;
package cn.axzo.tyr.server.repository.dao;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import cn.axzo.tyr.server.repository.entity.SaasPermissionGroup;
@ -17,5 +17,7 @@ public class SaasPermissionGroupDao extends ServiceImpl<SaasPermissionGroupMappe
.set(BaseEntity::getIsDelete,id)
.update();
}
}

View File

@ -1,14 +1,15 @@
package cn.axzo.tyr.server.repository.service;
package cn.axzo.tyr.server.repository.dao;
import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import cn.axzo.tyr.server.repository.entity.SaasPermissionGroup;
import cn.axzo.tyr.server.repository.entity.SaasPermissionGroupScope;
import cn.axzo.tyr.server.repository.mapper.SaasPermissionGroupMapper;
import cn.axzo.tyr.server.repository.mapper.SaasPermissionGroupScopeMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Repository;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
@Repository
@ -20,5 +21,16 @@ public class SaasPermissionGroupScopeDao extends ServiceImpl<SaasPermissionGroup
.set(BaseEntity::getIsDelete, TableIsDeleteEnum.DELETE.value)
.update();
}
@Override
public boolean removeByIds(Collection<? extends Serializable> idList) {
if (CollectionUtils.isEmpty(idList)) {
return false;
}
return lambdaUpdate()
.in(SaasPermissionGroupScope::getId,idList)
.set(BaseEntity::getIsDelete, TableIsDeleteEnum.DELETE.value)
.update();
}
}

View File

@ -1,4 +1,4 @@
package cn.axzo.tyr.server.repository.service;
package cn.axzo.tyr.server.repository.dao;
import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;

View File

@ -1,4 +1,4 @@
package cn.axzo.tyr.server.repository.service;
package cn.axzo.tyr.server.repository.dao;
import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;

View File

@ -1,4 +1,4 @@
package cn.axzo.tyr.server.repository.service;
package cn.axzo.tyr.server.repository.dao;
import cn.axzo.tyr.server.repository.entity.SaasProductModuleFeatureRelation;
import cn.axzo.tyr.server.repository.mapper.SaasProductModuleFeatureRelationMapper;

View File

@ -1,4 +1,4 @@
package cn.axzo.tyr.server.repository.service;
package cn.axzo.tyr.server.repository.dao;
import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;

View File

@ -1,14 +1,10 @@
package cn.axzo.tyr.server.repository.service;
package cn.axzo.tyr.server.repository.dao;
import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq;
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.mapper.SaasPgroupRoleRelationMapper;
import cn.axzo.tyr.server.repository.mapper.SaasRoleGroupMapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.collections.CollectionUtils;
@ -38,6 +34,8 @@ public class SaasRoleGroupDao extends ServiceImpl<SaasRoleGroupMapper, SaasRoleG
LambdaQueryChainWrapper<SaasRoleGroup> eq = this.lambdaQuery()
.in(CollectionUtils.isNotEmpty(req.getIds()), BaseEntity::getId, req.getIds())
.in(CollectionUtils.isNotEmpty(req.getWorkspaceTypeCode()), SaasRoleGroup::getWorkspaceTypeCode, req.getWorkspaceTypeCode())
.in(CollectionUtils.isNotEmpty(req.getWorkspaceIds()), SaasRoleGroup::getWorkspaceId, req.getWorkspaceIds())
.in(CollectionUtils.isNotEmpty(req.getOuIds()), SaasRoleGroup::getOuId, req.getOuIds())
.eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value);
if(CollectionUtils.isNotEmpty(req.getOuTypeCode())){
eq.last(" AND (" + condition.substring(0, condition.length() - 2) + ")");

View File

@ -1,25 +1,29 @@
package cn.axzo.tyr.server.repository.service;
package cn.axzo.tyr.server.repository.dao;
import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import cn.axzo.tyr.server.repository.entity.SaasRoleGroup;
import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation;
import cn.axzo.tyr.server.repository.mapper.SaasRoleGroupMapper;
import cn.axzo.tyr.server.repository.mapper.SaasRoleGroupRelationMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Repository;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
@Repository
public class SaasRoleGroupRelationDao extends ServiceImpl<SaasRoleGroupRelationMapper, SaasRoleGroupRelation> {
public void deleteByRoleGroupId(List<Long> roleGroupId) {
lambdaUpdate()
.in(SaasRoleGroupRelation::getSaasRoleGroupId, roleGroupId)
.set(BaseEntity::getIsDelete, TableIsDeleteEnum.DELETE.value)
.update();
@Override
public boolean removeByIds(Collection<? extends Serializable> idList) {
if (CollectionUtils.isEmpty(idList)) {
return false;
}
return lambdaUpdate()
.in(SaasRoleGroupRelation::getId,idList)
.set(BaseEntity::getIsDelete, TableIsDeleteEnum.DELETE.value)
.update();
}
}

View File

@ -1,17 +1,13 @@
package cn.axzo.tyr.server.repository.service;
package cn.axzo.tyr.server.repository.dao;
import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import cn.axzo.tyr.client.model.BaseWorkspaceModel;
import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq;
import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation;
import cn.axzo.tyr.server.repository.mapper.SaasRoleUserRelationMapper;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.toolkit.ChainWrappers;
import org.springframework.stereotype.Repository;
import java.util.List;

View File

@ -1,12 +1,10 @@
package cn.axzo.tyr.server.repository.service.impl;
package cn.axzo.tyr.server.repository.dao.impl;
import cn.axzo.tyr.server.repository.entity.SaasFeature;
import cn.axzo.tyr.server.repository.mapper.SaasFeatureMapper;
import cn.axzo.tyr.server.repository.service.SaasFeatureDao;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import cn.axzo.tyr.server.repository.dao.SaasFeatureDao;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

View File

@ -8,6 +8,7 @@ import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Objects;
/**
* 权限集作用范围
@ -56,5 +57,14 @@ public class SaasPermissionGroupScope extends BaseEntity<SaasPermissionGroupScop
protected Serializable pkVal() {
return this.id;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SaasPermissionGroupScope that = (SaasPermissionGroupScope) o;
return Objects.equals(pgroupId, that.pgroupId) && Objects.equals(type, that.type) && Objects.equals(scopeType, that.scopeType) && Objects.equals(scopeId, that.scopeId);
}
}

View File

@ -58,9 +58,8 @@ public class SaasPgroupPermissionRelation extends BaseEntity<SaasPgroupPermissio
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
SaasPgroupPermissionRelation that = (SaasPgroupPermissionRelation) o;
return Objects.equals(groupId, that.groupId) && Objects.equals(featureId, that.featureId) && Objects.equals(isDelete, that.isDelete);
return Objects.equals(groupId, that.groupId) && Objects.equals(featureId, that.featureId);
}
}

View File

@ -39,39 +39,14 @@ public class SaasRole extends BaseEntity<SaasRole> {
private Long workspaceId;
/**
* 废弃
*/
@Deprecated
private Integer workspaceType;
private Long ownerOuId;
/**
* 废弃 20230911
*/
private Integer fitOuTypeBit;
/**
* 废弃 20230911
*/
private Integer fitOuNodeTypeBit;
/**
* 废弃 20230911
*/
private Long positionTemplateId;
/**
* 废弃 20230911
*/
private Long projectTeamManageRoleResourceId;
/**
* 废弃 20230911
*/
private Long fromPreRoleId;
/**
* 废弃 20230911
*/
private String jobCode;
/**
* 创建者

View File

@ -50,9 +50,8 @@ public class SaasRoleGroupRelation extends BaseEntity<SaasRoleGroupRelation> imp
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
SaasRoleGroupRelation that = (SaasRoleGroupRelation) o;
return Objects.equals(roleId, that.roleId) && Objects.equals(saasRoleGroupId, that.saasRoleGroupId) && Objects.equals(isDelete, that.isDelete);
return Objects.equals(roleId, that.roleId) && Objects.equals(saasRoleGroupId, that.saasRoleGroupId);
}
}

View File

@ -1,9 +1,13 @@
package cn.axzo.tyr.server.service;
import cn.axzo.framework.domain.page.PageResp;
import cn.axzo.tyr.client.model.enums.PermissionGroupType;
import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq;
import cn.axzo.tyr.client.model.vo.DeletePermissionGroupVO;
import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO;
import cn.axzo.tyr.client.model.vo.SaveOrUpdatePermissionGroupVO;
import cn.axzo.tyr.client.model.vo.SavePermissionGroupPPVO;
import cn.axzo.tyr.server.repository.entity.SaasPermissionGroup;
import java.util.List;
@ -25,4 +29,14 @@ public interface PermissionGroupService {
void savePermissionPoints(SavePermissionGroupPPVO save);
/**
* 新增或者编辑例外权限
* @param permissionGroup
* @return
*/
Long saveOrUpdateScope(SaveOrUpdatePermissionGroupVO permissionGroup);
SaasPermissionGroup getRequiredPermissionGroup(Long permissionGroupId, PermissionGroupType type);
void deletePermissionGroupSpecial(DeletePermissionGroupVO group);
}

View File

@ -27,4 +27,6 @@ public interface SaasBasicDictService {
Boolean update(BasicDictUpdateReq req);
Boolean updateStauts(BasicDictUpdateStatusReq req);
BasicDictNodeResp getWorkspaceType(String workspaceType);
}

View File

@ -0,0 +1,9 @@
package cn.axzo.tyr.server.service;
import cn.axzo.tyr.server.repository.entity.SaasPermissionGroupScope;
import java.util.List;
public interface SaasPermissionGroupScopeService {
void saveOrUpdate(List<SaasPermissionGroupScope> scopes);
}

View File

@ -8,7 +8,7 @@ import java.util.List;
public interface SaasRoleGroupService {
List<SaasRoleGroupVO> getList(QuerySaasRoleGroupReq req);
void saveOrUpdate(SaasRoleGroupVO req);
Long saveOrUpdate(SaasRoleGroupVO req);
void delete(Long id);
void delete(List<Long> ids);
}

View File

@ -0,0 +1,14 @@
package cn.axzo.tyr.server.service;
import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserRelationDTO;
import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam;
import java.util.List;
/**
* @author haiyangjin
* @date 2023/9/14
*/
public interface SaasRoleUserRelationService {
List<SaasRoleUserRelationDTO> list(RoleUserParam param);
}

View File

@ -1,8 +1,11 @@
package cn.axzo.tyr.server.service;
import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam;
import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq;
import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation;
import javax.validation.Valid;
import java.util.List;
/**
* @author tanjie@axzo.cn
@ -11,6 +14,4 @@ import javax.validation.Valid;
public interface SaasRoleUserService {
void saveOrUpdate( RoleUserReq req);
}

View File

@ -7,22 +7,16 @@ import cn.axzo.framework.domain.web.BizException;
import cn.axzo.framework.domain.web.code.BaseCode;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import cn.axzo.tyr.client.model.enums.PermissionGroupType;
import cn.axzo.tyr.client.model.enums.PermissionScope;
import cn.axzo.tyr.client.model.enums.PermissionScopeType;
import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode;
import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq;
import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO;
import cn.axzo.tyr.client.model.vo.SaasRolePermissionScopeVO;
import cn.axzo.tyr.client.model.vo.SavePermissionGroupPPVO;
import cn.axzo.tyr.server.repository.entity.SaasPermissionGroup;
import cn.axzo.tyr.server.repository.entity.SaasPermissionGroupScope;
import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation;
import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation;
import cn.axzo.tyr.server.repository.service.SaasPermissionGroupDao;
import cn.axzo.tyr.server.repository.service.SaasPermissionGroupScopeDao;
import cn.axzo.tyr.server.repository.service.SaasPgroupPermissionRelationDao;
import cn.axzo.tyr.server.repository.service.SaasPgroupRoleRelationDao;
import cn.axzo.tyr.client.model.vo.*;
import cn.axzo.tyr.server.repository.entity.*;
import cn.axzo.tyr.server.repository.dao.*;
import cn.axzo.tyr.server.service.PermissionGroupService;
import cn.axzo.tyr.server.service.PermissionPointService;
import cn.axzo.tyr.server.service.SaasPermissionGroupScopeService;
import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.RequiredArgsConstructor;
@ -33,10 +27,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -63,9 +54,23 @@ public class PermissionGroupImpl implements PermissionGroupService {
SaasPermissionGroupScopeDao saasPermissionGroupScopeDao;
@Autowired
SaasPgroupPermissionRelationService saasPgroupPermissionRelationService;
@Autowired
SaasRoleDao saasRoleDao;
@Autowired
SaasPermissionGroupScopeService saasPermissionGroupScopeService;
@Override
public List<SaasPermissionGroupVO> query(QuerySaasPermissionGroupReq req) {
if (CollectionUtils.isEmpty(req.getWorkspaceId())) {
req.setWorkspaceId(Arrays.asList(-1l));
} else if(!req.getWorkspaceId().contains(-1l)){
req.getWorkspaceId().add(-1l);
}
if (CollectionUtils.isEmpty(req.getOuId())) {
req.setOuId(Arrays.asList(-1l));
} else if (!req.getOuId().contains(-1l)) {
req.getOuId().add(-1l);
}
// 如果角色id不为空则先查询角色权限集关联表
List<SaasPgroupRoleRelation> relationList = null;
if (CollectionUtils.isNotEmpty(req.getRoleIds())) {
@ -237,16 +242,7 @@ public class PermissionGroupImpl implements PermissionGroupService {
@Override
@Transactional(rollbackFor = Exception.class)
public void savePermissionPoints(SavePermissionGroupPPVO save) {
List<SaasPermissionGroup> groups = permissionGroupDao.lambdaQuery()
.eq(SaasPermissionGroup::getId, save.getId())
.eq(SaasPermissionGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value).list();
if (CollectionUtils.isEmpty(groups)) {
throw new BizException(BaseCode.BAD_REQUEST, "权限集不存在");
}
SaasPermissionGroup saasPermissionGroup = groups.get(0);
if (!Objects.equals(saasPermissionGroup.getIsCommon(), PermissionGroupType.COMMON.getCode())) {
throw new BizException(BaseCode.BAD_REQUEST, "权限集不是通用权限集");
}
SaasPermissionGroup saasPermissionGroup = getRequiredPermissionGroup(save.getId(), null);
List<SaasPgroupPermissionRelation> pgpRelations = Optional.ofNullable(save.getSelectedPPIds()).orElse(new ArrayList<>()).stream().map(ppId -> {
SaasPgroupPermissionRelation target = new SaasPgroupPermissionRelation();
target.setGroupId(saasPermissionGroup.getId());
@ -257,4 +253,168 @@ public class PermissionGroupImpl implements PermissionGroupService {
}).collect(Collectors.toList());
saasPgroupPermissionRelationService.saveOrUpdate(pgpRelations);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Long saveOrUpdateScope(SaveOrUpdatePermissionGroupVO permissionGroup) {
SaasPermissionGroup saasPermissionGroup;
validSaasPermissionGroup(permissionGroup);
Date now = new Date();
if (Objects.nonNull(permissionGroup.getId())) {
saasPermissionGroup = getRequiredPermissionGroup(permissionGroup.getId(), PermissionGroupType.SPECIAL);
} else {
saasPermissionGroup = new SaasPermissionGroup();
saasPermissionGroup.setCreateBy(permissionGroup.getOperatorId());
saasPermissionGroup.setCreatorName(Optional.ofNullable(permissionGroup.getOperatorName()).orElse(""));
saasPermissionGroup.setUpdateBy(permissionGroup.getOperatorId());
saasPermissionGroup.setUpdatorName(Optional.ofNullable(permissionGroup.getOperatorName()).orElse(""));
saasPermissionGroup.setIsCommon(PermissionGroupType.SPECIAL.getCode());
saasPermissionGroup.setCreateAt(now);
}
saasPermissionGroup.setType(permissionGroup.getType());
saasPermissionGroup.setName(permissionGroup.getName());
saasPermissionGroup.setUpdateBy(permissionGroup.getOperatorId());
saasPermissionGroup.setUpdatorName(Optional.ofNullable(permissionGroup.getOperatorName()).orElse(""));
saasPermissionGroup.setDescription(permissionGroup.getDescription());
saasPermissionGroup.setUpdateAt(now);
permissionGroupDao.saveOrUpdate(saasPermissionGroup);
if (Objects.isNull(permissionGroup.getId())) {
SaasPgroupRoleRelation roleRelation = new SaasPgroupRoleRelation();
roleRelation.setRoleId(permissionGroup.getRoleId());
roleRelation.setGroupId(saasPermissionGroup.getId());
roleRelation.setCreateBy(permissionGroup.getOperatorId());
roleRelation.setUpdateBy(permissionGroup.getOperatorId());
roleRelation.setCreateAt(now);
roleRelation.setUpdateAt(now);
roleRelationDao.save(roleRelation);
}
List<SaasPermissionGroupScope> scopes = new ArrayList<>();
if (CollectionUtils.isNotEmpty(permissionGroup.getSelectedWorkspace())) {
scopes.addAll(permissionGroup.getSelectedWorkspace().stream().map(w -> {
SaasPermissionGroupScope scope = new SaasPermissionGroupScope();
scope.setPgroupId(saasPermissionGroup.getId());
scope.setType(w.getType());
scope.setScopeType(PermissionScopeType.WORKSPACE.getCode());
scope.setScopeId(w.getScopeId());
scope.setCreateAt(now);
scope.setUpdateAt(now);
return scope;
}).collect(Collectors.toList()));
}
if (CollectionUtils.isNotEmpty(permissionGroup.getSelectedOu())) {
scopes.addAll(permissionGroup.getSelectedOu().stream().map(w -> {
SaasPermissionGroupScope scope = new SaasPermissionGroupScope();
scope.setPgroupId(saasPermissionGroup.getId());
scope.setType(w.getType());
scope.setScopeType(PermissionScopeType.OU.getCode());
scope.setScopeId(w.getScopeId());
scope.setCreateAt(now);
scope.setUpdateAt(now);
return scope;
}).collect(Collectors.toList()));
}
saasPermissionGroupScopeService.saveOrUpdate(scopes);
return saasPermissionGroup.getId();
}
@Override
public SaasPermissionGroup getRequiredPermissionGroup(Long permissionGroupId, PermissionGroupType type) {
List<SaasPermissionGroup> groups = permissionGroupDao.lambdaQuery()
.eq(SaasPermissionGroup::getId, permissionGroupId)
.eq(SaasPermissionGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value).list();
if (CollectionUtils.isEmpty(groups)) {
throw new BizException(BaseCode.BAD_REQUEST, "权限集不存在");
}
SaasPermissionGroup saasPermissionGroup = groups.get(0);
if (Objects.nonNull(type) && !Objects.equals(saasPermissionGroup.getIsCommon(), type.getCode())) {
throw new BizException(BaseCode.BAD_REQUEST, String.format("权限集不是%s权限集", type.getDesc()));
}
return saasPermissionGroup;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deletePermissionGroupSpecial(DeletePermissionGroupVO group) {
List<SaasPgroupRoleRelation> relations = roleRelationDao.lambdaQuery().eq(SaasPgroupRoleRelation::getRoleId, group.getRoleId())
.in(SaasPgroupRoleRelation::getGroupId, group.getSpecialPermissionGroupIds())
.eq(SaasPgroupRoleRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list();
if (CollectionUtils.isEmpty(relations)) {
throw new BizException(BaseCode.BAD_REQUEST, "权限集不存在");
}
List<Long> deleteGroupIds = relations.stream().map(SaasPgroupRoleRelation::getGroupId).sorted().collect(Collectors.toList());
List<SaasPermissionGroup> groups = permissionGroupDao.lambdaQuery()
.in(SaasPermissionGroup::getId, deleteGroupIds)
.eq(SaasPermissionGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value).list();
if (groups.stream().anyMatch(e -> !Objects.equals(e.getIsCommon(), PermissionGroupType.SPECIAL.getCode()))) {
throw new BizException(BaseCode.BAD_REQUEST, "只能删除例外权限集");
}
//删除角色关联
roleRelationDao.removeByIds(relations.stream().map(SaasPgroupRoleRelation::getId).sorted().collect(Collectors.toList()));
List<SaasPermissionGroupScope> scopes = saasPermissionGroupScopeDao.lambdaQuery().in(SaasPermissionGroupScope::getPgroupId, deleteGroupIds)
.eq(SaasPermissionGroupScope::getIsDelete, TableIsDeleteEnum.NORMAL.value).list();
if (CollectionUtils.isNotEmpty(scopes)) {
// 删除例外scope
saasPermissionGroupScopeDao.removeByIds(scopes.stream().map(SaasPermissionGroupScope::getId).sorted().collect(Collectors.toList()));
}
// 删除权限集
permissionGroupDao.lambdaUpdate()
.in(BaseEntity::getId,deleteGroupIds)
.set(BaseEntity::getIsDelete, TableIsDeleteEnum.DELETE.value)
.set(BaseEntity::getUpdateAt, new Date())
.set(SaasPermissionGroup::getUpdateBy, group.getOperatorId())
.set(SaasPermissionGroup::getUpdatorName, group.getOperatorName())
.update();
}
private void validSaasPermissionGroup(SaveOrUpdatePermissionGroupVO permissionGroup) {
SaasRole saasRole = saasRoleDao.getById(permissionGroup.getRoleId());
if (Objects.isNull(saasRole)) {
throw new BizException(BaseCode.BAD_REQUEST, "权限集不存在");
}
if (Objects.nonNull(permissionGroup.getId())) {
int relationCount = roleRelationDao.lambdaQuery()
.eq(SaasPgroupRoleRelation::getRoleId, permissionGroup.getRoleId())
.eq(SaasPgroupRoleRelation::getGroupId, permissionGroup.getId())
.eq(SaasPgroupRoleRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).count();
if (relationCount == 0) {
throw new BizException(BaseCode.BAD_REQUEST, "角色和权限组不存在关联关系");
}
}
List<SaveOrUpdatePermissionGroupVO.PermissionGroupScopeVO> selectedWorkspace = permissionGroup.getSelectedWorkspace();
List<SaveOrUpdatePermissionGroupVO.PermissionGroupScopeVO> selectedOu = permissionGroup.getSelectedOu();
Set<Integer> scopeTypes = new HashSet<>();
if (CollectionUtils.isEmpty(selectedWorkspace) && CollectionUtils.isEmpty(selectedOu)) {
throw new BizException(BaseCode.BAD_REQUEST, "例外不能为空");
}
// TODO 校验规则是产品给的吗?
if (CollectionUtils.isNotEmpty(selectedWorkspace)) {
Map<Integer, List<SaveOrUpdatePermissionGroupVO.PermissionGroupScopeVO>> selectedWorkspaceMap = selectedWorkspace.stream()
.collect(Collectors.groupingBy(SaveOrUpdatePermissionGroupVO.PermissionGroupScopeVO::getType));
List<SaveOrUpdatePermissionGroupVO.PermissionGroupScopeVO> includeScopes = Optional.ofNullable(selectedWorkspaceMap.get(PermissionScope.INCLUDE.getCode())).orElse(new ArrayList<>());
List<SaveOrUpdatePermissionGroupVO.PermissionGroupScopeVO> excludeScopes = Optional.ofNullable(selectedWorkspaceMap.get(PermissionScope.EXCLUDE.getCode())).orElse(new ArrayList<>());
if (includeScopes.size() + excludeScopes.size() != selectedWorkspace.size()) {
throw new BizException(BaseCode.BAD_REQUEST, "选择类型设置错误");
}
if (CollectionUtils.containsAny(includeScopes, excludeScopes)) {
throw new BizException(BaseCode.BAD_REQUEST, "项目部例外设置冲突");
}
scopeTypes.addAll(selectedWorkspace.stream().map(SaveOrUpdatePermissionGroupVO.PermissionGroupScopeVO::getType).collect(Collectors.toSet()));
}
if (CollectionUtils.isNotEmpty(selectedOu)) {
Map<Integer, List<SaveOrUpdatePermissionGroupVO.PermissionGroupScopeVO>> selectedOuMap = selectedOu.stream()
.collect(Collectors.groupingBy(SaveOrUpdatePermissionGroupVO.PermissionGroupScopeVO::getType));
List<SaveOrUpdatePermissionGroupVO.PermissionGroupScopeVO> includeScopes = Optional.ofNullable(selectedOuMap.get(PermissionScope.INCLUDE.getCode())).orElse(new ArrayList<>());
List<SaveOrUpdatePermissionGroupVO.PermissionGroupScopeVO> excludeScopes = Optional.ofNullable(selectedOuMap.get(PermissionScope.EXCLUDE.getCode())).orElse(new ArrayList<>());
if (includeScopes.size() + excludeScopes.size() != selectedWorkspace.size()) {
throw new BizException(BaseCode.BAD_REQUEST, "选择类型设置错误");
}
if (CollectionUtils.containsAny(includeScopes, excludeScopes)) {
throw new BizException(BaseCode.BAD_REQUEST, "单位例外设置冲突");
}
scopeTypes.addAll(selectedOu.stream().map(SaveOrUpdatePermissionGroupVO.PermissionGroupScopeVO::getType).collect(Collectors.toSet()));
}
if (scopeTypes.size() > 1) {
throw new BizException(BaseCode.BAD_REQUEST, "例外类型不能同时指定适用与不适用");
}
}
}

View File

@ -17,14 +17,14 @@ import cn.axzo.tyr.client.model.permission.PermissionPointMoveRequest;
import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode;
import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq;
import cn.axzo.tyr.client.model.permission.PermissionPointVO;
import cn.axzo.tyr.server.repository.SaasBasicDictDao;
import cn.axzo.tyr.server.repository.entity.SaasFeature;
import cn.axzo.tyr.server.repository.service.SaasFeatureDao;
import cn.axzo.tyr.server.repository.service.SaasPgroupPermissionRelationDao;
import cn.axzo.tyr.server.repository.dao.SaasFeatureDao;
import cn.axzo.tyr.server.repository.dao.SaasPgroupPermissionRelationDao;
import cn.axzo.tyr.server.service.PermissionPointService;
import cn.axzo.tyr.server.service.SaasBasicDictService;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -32,7 +32,6 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -51,27 +50,14 @@ import static cn.axzo.tyr.server.common.constants.PermissionConstant.*;
public class PermissionPointServiceImpl implements PermissionPointService {
private final SaasFeatureDao saasFeatureDao;
private final SaasBasicDictDao saasBasicDictDao;
private final SaasBasicDictService saasBasicDictService;
private final SaasPgroupPermissionRelationDao saasPgroupPermissionRelationDao;
@Override
public List<PermissionPointTreeNode> listTreeNodes(PermissionPointTreeQueryReq request) {
//条件转换 workspace --> terminal
workspace2Terminal(request);
//查询条件构建
LambdaQueryWrapper<SaasFeature> queryWrapper = new LambdaQueryWrapper<SaasFeature>()
.in(CollectionUtil.isNotEmpty(request.getTerminalList()), SaasFeature::getTerminal, request.getTerminalList());
//查指定节点子级处理条件
if (request.getParentId() != null && request.getParentId() != 0) {
SaasFeature parent = this.saasFeatureDao.getById(request.getParentId());
if (parent == null) {
log.error("指定的父级节点不存在:{}", request.getParentId());
throw new BizException(BaseCode.BAD_REQUEST);
}
//追加条件path左匹配
queryWrapper.likeRight(SaasFeature::getPath, parent.getPath() + parent.getId() + FEATURE_PATH_DELIMITER);
}
//构建查询条件
Wrapper<SaasFeature> queryWrapper = buildQueryWrapper(request);
List<SaasFeature> list = saasFeatureDao.list(queryWrapper);
//构建树形结构 整体排序保证层级内的有序 - 优化点构建树形结构时进行过滤
@ -85,14 +71,19 @@ public class PermissionPointServiceImpl implements PermissionPointService {
List<PermissionPointTreeNode> nodesResult = filterTreeNode(request, treeList);
//指定parent后不需要顶级的工作台
if (request.getParentId() != null) {
if (request.getParentId() != null || CollectionUtil.isEmpty(nodesResult)) {
return nodesResult;
}
return buildTopNodes(nodesResult);
}
private List<PermissionPointTreeNode> buildTopNodes(List<PermissionPointTreeNode> nodesResult) {
//构建workspace-terminal工作台层级
//按terminal分组
Map<String, List<PermissionPointTreeNode>> mappingNode = nodesResult.stream()
.collect(Collectors.groupingBy(PermissionPointTreeNode::getTerminal));
//构建workspace-terminal工作台层级
List<BasicDictTreeResp> dictList = saasBasicDictService.getBasicDictNodeTree(BasicDictQueryReq.builder()
.type(DictTypeFiledEnum.TERMINAL).build());
//遍历所有workspace和terminal-构建顶层两级
@ -101,7 +92,7 @@ public class PermissionPointServiceImpl implements PermissionPointService {
List<BasicDictTreeResp> terminals = workspace.getChildren();
PermissionPointTreeNode workspaceNode = null;
for (BasicDictTreeResp terminal : terminals) {
//对应权限点 则建立上级
//下级权限点 则建立上级
List<PermissionPointTreeNode> childrenNodes = mappingNode.get(terminal.getCode());
if (CollectionUtil.isNotEmpty(childrenNodes)) {
PermissionPointTreeNode terminalTree = new PermissionPointTreeNode();
@ -125,6 +116,25 @@ public class PermissionPointServiceImpl implements PermissionPointService {
return result;
}
private Wrapper<SaasFeature> buildQueryWrapper(PermissionPointTreeQueryReq request) {
//条件转换 workspace --> terminal
workspace2Terminal(request);
//查询条件构建
LambdaQueryWrapper<SaasFeature> queryWrapper = new LambdaQueryWrapper<SaasFeature>()
.in(CollectionUtil.isNotEmpty(request.getTerminalList()), SaasFeature::getTerminal, request.getTerminalList());
//查指定节点子级处理条件
if (request.getParentId() != null && request.getParentId() != 0) {
SaasFeature parent = this.saasFeatureDao.getById(request.getParentId());
if (parent == null) {
log.error("指定的父级节点不存在:{}", request.getParentId());
throw new BizException(BaseCode.BAD_REQUEST);
}
//追加条件path左匹配
queryWrapper.likeRight(SaasFeature::getPath, parent.getPath() + parent.getId() + FEATURE_PATH_DELIMITER);
}
return queryWrapper;
}
private void workspace2Terminal(PermissionPointTreeQueryReq request) {
if (CollectionUtil.isNotEmpty(request.getWorkspaceType())) {
List<String> terminals = new ArrayList<>();
@ -132,7 +142,7 @@ public class PermissionPointServiceImpl implements PermissionPointService {
for (String workSpaceType : request.getWorkspaceType()) {
dictReq.setWorkspaceType(DictWorkSpaceTypeEnum.getByValue(workSpaceType));
dictReq.setType(DictTypeFiledEnum.TERMINAL);
List<BasicDictNodeResp> dictList = saasBasicDictDao.getBasicDictNodeList(dictReq);
List<BasicDictNodeResp> dictList = saasBasicDictService.getBasicDictNodeList(dictReq);
terminals.addAll(dictList.stream().map(BasicDictNodeResp::getCode).collect(Collectors.toList()));
}
request.setTerminalList(terminals);
@ -195,13 +205,11 @@ public class PermissionPointServiceImpl implements PermissionPointService {
@Override
public PermissionPointVO getDetail(Long permissionId) {
SaasFeature feature = this.saasFeatureDao.getById(permissionId);
if (feature == null) {
log.warn("no saasFeature found for:{}", permissionId);
throw new BizException(BaseCode.BAD_REQUEST);
}
SaasFeature feature = getAndCheck(permissionId);
PermissionPointVO vo = BeanMapper.copyBean(feature, PermissionPointVO.class);
vo.setFeatureTypeDesc(FeatureType.apply(vo.getFeatureType()).getDesc());
//按位拆分适配单位类型和节点类型
vo.applyFitOuTypeBit(feature.getFitOuTypeBit());
vo.applyFitOuNodeTypeBit(feature.getFitOuNodeTypeBit());
@ -210,8 +218,8 @@ public class PermissionPointServiceImpl implements PermissionPointService {
BasicDictNodeReq terminalReq = new BasicDictNodeReq();
terminalReq.setCode(feature.getTerminal());
terminalReq.setType(DictTypeFiledEnum.TERMINAL);
BasicDictNodeResp terminal = saasBasicDictDao.getBasicDictNode(terminalReq);
BasicDictNodeResp workspace = saasBasicDictDao.getWorkspaceType(terminal.getWorkspaceType());
BasicDictNodeResp terminal = saasBasicDictService.getBasicDictNode(terminalReq);
BasicDictNodeResp workspace = saasBasicDictService.getWorkspaceType(terminal.getWorkspaceType());
List<String> pathName = new ArrayList<>();
pathName.add(workspace.getName());
pathName.add(terminal.getName());
@ -222,11 +230,12 @@ public class PermissionPointServiceImpl implements PermissionPointService {
vo.setPathName(pathName);
return vo;
}
//查询所有父级
List<String> split = StrUtil.split(vo.getPath(), FEATURE_PATH_DELIMITER, true, true);
List<Long> ids = split.stream()
.filter(x -> !StrUtil.equals(FEATURE_NO_PARENT, x))
//查询所有父级 - path拆分查询
List<Long> ids = StrUtil.split(vo.getPath(), FEATURE_PATH_DELIMITER, true, true)
.stream()
.map(Long::valueOf)
.filter(id -> id > 0)
.collect(Collectors.toList());
Map<Long, SaasFeature> parentsMapping = this.saasFeatureDao.listByIds(ids)
.stream()
@ -284,23 +293,22 @@ public class PermissionPointServiceImpl implements PermissionPointService {
saasFeature.setFitOuNodeTypeBit(dto.mergeFitOuNodeTypeBit());
SaasFeature parent;
if (dto.getParentId() == null || dto.getParentId() < 1) {
parent = new SaasFeature();
parent.setPath(FEATURE_TOP_PATH);
parent.setBusinessNo("0");
//设置为0便于下面查询
parent.setParentId(0L);
saasFeature.setParentId(0L);
saasFeature.setPath(FEATURE_TOP_PATH);
saasFeature.setParentBusinessNo(FEATURE_TOP_BIZ_NO);
} else {
parent = this.saasFeatureDao.getById(dto.getParentId());
saasFeature.setPath(parent.getPath() + parent.getId() + FEATURE_PATH_DELIMITER);
saasFeature.setParentBusinessNo(parent.getBusinessNo());
}
//计算子节点作为sort
//生成biz_no
saasFeature.setBusinessNo(FEATURE_BIZ_NO_PREFIX + System.currentTimeMillis());
saasFeature.setParentBusinessNo(parent.getBusinessNo());
saasFeature.setPath(parent.getPath() + parent.getId() + FEATURE_PATH_DELIMITER);
this.saasFeatureDao.save(saasFeature);
dto.setId(saasFeature.getId());
dto.setBusinessNo(saasFeature.getBusinessNo());
//调整排序 - 兼容处理老数据数据规范化
changeSort(saasFeature, saasFeature.getSort());
return dto;
}
@ -338,7 +346,8 @@ public class PermissionPointServiceImpl implements PermissionPointService {
public void move(PermissionPointMoveRequest request) {
SaasFeature feature = getAndCheck(request.getPermissionId());
changeParent(feature, request);
changeSort(feature, request);
feature.setParentId(request.getParentId());
changeSort(feature, request.getSort());
}
@Override
@ -357,35 +366,36 @@ public class PermissionPointServiceImpl implements PermissionPointService {
.collect(Collectors.toList());
}
private void changeSort(SaasFeature feature, PermissionPointMoveRequest request) {
//原parent下节点排序会有缺失但无影响-不处理
private void changeSort(SaasFeature feature, Integer targetSort) {
//排序从1开始
//原parent下节点排序会有缺失 - 有节点新增时进行处理
//同terminal 同级节点
List<SaasFeature> saasFeatures = this.saasFeatureDao.listByParentIdAndTerminal(request.getParentId(),
List<SaasFeature> saasFeatures = this.saasFeatureDao.listByParentIdAndTerminal(feature.getParentId(),
feature.getTerminal());
//数据规范化
if (targetSort == null
|| targetSort > saasFeatures.size()) {
//默认在最后
targetSort = saasFeatures.size();
}
targetSort = targetSort < 1 ? 1 : targetSort;
//排序并排除自己
List<SaasFeature> sortedList = saasFeatures.stream()
.sorted(Comparator.comparing(SaasFeature::getSort))
.filter(x -> !x.getId().equals(feature.getId()))
.collect(Collectors.toList());
//将自己插入指定位置
sortedList.add(targetSort - 1, feature);
//记录排序
Map<Long, Integer> sortMap = new HashMap<>();
//插入指定位置
sortMap.put(request.getPermissionId(), request.getSort());
//找到需要更新排序其他节点
AtomicInteger sort = new AtomicInteger(0);
Integer targetSort = request.getSort();
saasFeatures.stream()
.sorted(Comparator.comparing(SaasFeature::getSort))
.forEach(x -> {
//跳过自己
if (!x.getId().equals(request.getPermissionId())) {
//记录位置
sort.incrementAndGet();
if (targetSort.equals(sort.get())) {
//找到指定位置当前节点需要移动到下一位置
sort.incrementAndGet();
}
if (!x.getSort().equals(sort.get())) {
// 排序需要修正
sortMap.put(x.getId(), sort.get());
}
}
});
//找到需要更新排序的节点
for (int i = 0; i < sortedList.size(); i++) {
SaasFeature saasFeature = sortedList.get(i);
if (Objects.equals(saasFeature.getSort(), i + 1)) {
sortMap.put(saasFeature.getId(), i + 1);
}
}
//执行更新 - 有一定性能问题
for (Map.Entry<Long, Integer> entry : sortMap.entrySet()) {
this.saasFeatureDao.updateSort(entry.getKey(), entry.getValue());
@ -431,6 +441,7 @@ public class PermissionPointServiceImpl implements PermissionPointService {
node.setTerminal(feature.getTerminal());
node.setFeatureType(feature.getFeatureType());
node.setFeatureTypeDesc(FeatureType.apply(feature.getFeatureType()).getDesc());
node.setDelegatedType(feature.getDelegatedType());
node.setPath(feature.getPath());
node.setSort(feature.getSort());
return node;

View File

@ -6,7 +6,7 @@ import cn.axzo.tyr.client.model.product.ProductFeatureRelationSearchReq;
import cn.axzo.tyr.client.model.product.ProductFeatureRelationUpdateReq;
import cn.axzo.tyr.client.model.product.ProductFeatureRelationVO;
import cn.axzo.tyr.server.repository.entity.SaasProductModuleFeatureRelation;
import cn.axzo.tyr.server.repository.service.SaasProductModuleFeatureRelationDao;
import cn.axzo.tyr.server.repository.dao.SaasProductModuleFeatureRelationDao;
import cn.axzo.tyr.server.service.ProductFeatureRelationService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;

View File

@ -11,7 +11,7 @@ import cn.axzo.tyr.client.model.product.ProductSearchPageReq;
import cn.axzo.tyr.client.model.product.ProductUpdateReq;
import cn.axzo.tyr.client.model.product.ProductVO;
import cn.axzo.tyr.server.repository.entity.ProductModule;
import cn.axzo.tyr.server.repository.service.ProductModuleDao;
import cn.axzo.tyr.server.repository.dao.ProductModuleDao;
import cn.axzo.tyr.server.service.ProductService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.RequiredArgsConstructor;

View File

@ -13,8 +13,8 @@ import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes;
import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO;
import cn.axzo.tyr.client.model.vo.SaasRoleVO;
import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO;
import cn.axzo.tyr.server.repository.dao.*;
import cn.axzo.tyr.server.repository.entity.*;
import cn.axzo.tyr.server.repository.service.*;
import cn.axzo.tyr.server.service.*;
import cn.hutool.core.bean.BeanUtil;
import lombok.RequiredArgsConstructor;
@ -209,6 +209,14 @@ public class RoleServiceImpl implements RoleService {
if (Objects.isNull(saasRole)) {
throw new BizException(BaseCode.BAD_REQUEST, "角色不存在");
}
if (Objects.isNull(saveOrUpdateRole.getPermissionGroupId())) {
throw new BizException(BaseCode.BAD_REQUEST, "更新角色时权限集不能为空不存在");
}
SaasPermissionGroup group = saasPermissionGroupDao.lambdaQuery().eq(SaasPermissionGroup::getId, saveOrUpdateRole.getPermissionGroupId())
.eq(SaasPermissionGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value).one();
if (Objects.isNull(group)) {
throw new BizException(BaseCode.BAD_REQUEST, "权限集不存在");
}
} else {
saasRole = new SaasRole();
saasRole.setCreateBy(saveOrUpdateRole.getOperatorId());
@ -225,7 +233,6 @@ public class RoleServiceImpl implements RoleService {
saasRole.setDescription(saasRole.getDescription());
saasRole.setRoleType(saveOrUpdateRole.getRoleType());
saasRole.setWorkspaceId(saveOrUpdateRole.getWorkspaceId());
saasRole.setWorkspaceType(saveOrUpdateRole.getWorkspaceType());
saasRole.setOwnerOuId(saveOrUpdateRole.getOwnerOuId());
saasRole.setUpdateBy(saveOrUpdateRole.getOperatorId());
saasRole.setUpdateAt(now);
@ -241,10 +248,10 @@ public class RoleServiceImpl implements RoleService {
}).collect(Collectors.toList()));
saasPermissionGroupDao.saveOrUpdate(saasPermissionGroup);
SaasPgroupRoleRelation pgrr = new SaasPgroupRoleRelation();
pgrr.setCreateBy(saveOrUpdateRole.getOperatorId());
pgrr.setRoleId(saasRole.getId());
pgrr.setUpdateBy(saveOrUpdateRole.getOperatorId());
pgrr.setGroupId(saasPermissionGroup.getId());
pgrr.setCreateBy(saveOrUpdateRole.getOperatorId());
pgrr.setUpdateBy(saveOrUpdateRole.getOperatorId());
pgrr.setCreateAt(now);
pgrr.setUpdateAt(now);
// 新增或保存角色通用权限映射
@ -286,16 +293,7 @@ public class RoleServiceImpl implements RoleService {
saasPermissionGroup.setCreateBy(saveOrUpdateRole.getOperatorId());
saasPermissionGroup.setCreatorName(saveOrUpdateRole.getOperatorName());
} else {
List<SaasPermissionGroup> groups = saasPermissionGroupDao.lambdaQuery()
.eq(SaasPermissionGroup::getId, saveOrUpdateRole.getPermissionGroupId())
.eq(SaasPermissionGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value).list();
if (CollectionUtils.isEmpty(groups)) {
throw new BizException(BaseCode.BAD_REQUEST, "权限集不存在");
}
saasPermissionGroup = groups.get(0);
if (!Objects.equals(saasPermissionGroup.getIsCommon(), PermissionGroupType.COMMON.getCode())) {
throw new BizException(BaseCode.BAD_REQUEST, "权限集不是通用权限集");
}
saasPermissionGroup = permissionGroupService.getRequiredPermissionGroup(saveOrUpdateRole.getPermissionGroupId(), PermissionGroupType.COMMON);
}
saasPermissionGroup.setName(saveOrUpdateRole.getPermissionGroupName());
saasPermissionGroup.setDescription(saveOrUpdateRole.getPermissionGroupDescription());
@ -315,7 +313,7 @@ public class RoleServiceImpl implements RoleService {
Map<Long, SaasRoleGroup> roleGroupMap = groups.stream().collect(Collectors.toMap(SaasRoleGroup::getId, Function.identity()));
List<SaveOrUpdateRoleVO.GroupInfoVO> invalidRoleGroups = groupTrees.stream().filter(rg -> {
SaasRoleGroup target = roleGroupMap.get(rg.getId());
return Objects.isNull(target) || !Objects.equals(target.getWorkspaceTypeCode(), rg.getWorkspaceTypeCode().toString());
return Objects.isNull(target) || !Objects.equals(target.getWorkspaceTypeCode(), rg.getWorkspaceTypeCode());
}).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(invalidRoleGroups)) {
throw new BizException(BaseCode.BAD_REQUEST, "角色分组信息错误");

View File

@ -1,47 +1,22 @@
package cn.axzo.tyr.server.service.impl;
import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum;
import cn.axzo.framework.domain.ServiceException;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import cn.axzo.tyr.client.model.BaseWorkspaceModel;
import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq;
import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq;
import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq;
import cn.axzo.tyr.client.model.req.QuerySaasRoleReq;
import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes;
import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq;
import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO;
import cn.axzo.tyr.client.model.vo.SaasRoleVO;
import cn.axzo.tyr.server.common.enums.RoleTypeEnum;
import cn.axzo.tyr.server.common.util.StreamUtil;
import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation;
import cn.axzo.tyr.client.common.enums.RoleTypeEnum;
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.service.SaasPgroupRoleRelationDao;
import cn.axzo.tyr.server.repository.service.SaasRoleDao;
import cn.axzo.tyr.server.repository.service.SaasRoleGroupDao;
import cn.axzo.tyr.server.repository.service.SaasRoleGroupRelationDao;
import cn.axzo.tyr.server.repository.service.SaasRoleUserRelationDao;
import cn.axzo.tyr.server.service.PermissionGroupService;
import cn.axzo.tyr.server.service.RoleService;
import cn.axzo.tyr.server.repository.dao.SaasRoleDao;
import cn.axzo.tyr.server.repository.dao.SaasRoleUserRelationDao;
import cn.axzo.tyr.server.service.SaasRoleUserService;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**

View File

@ -170,6 +170,11 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService {
return saasBasicDictDao.updateStatus(req);
}
@Override
public BasicDictNodeResp getWorkspaceType(String workspaceType) {
return saasBasicDictDao.getWorkspaceType(workspaceType);
}
@Override
public BasicDictNodeResp getById(Long id) {
return BeanMapper.copyBean(saasBasicDictDao.getById(id), BasicDictNodeResp.class);

View File

@ -0,0 +1,40 @@
package cn.axzo.tyr.server.service.impl;
import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum;
import cn.axzo.tyr.server.repository.entity.SaasPermissionGroupScope;
import cn.axzo.tyr.server.repository.dao.SaasPermissionGroupScopeDao;
import cn.axzo.tyr.server.service.SaasPermissionGroupScopeService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Service
@RequiredArgsConstructor
public class SaasPermissionGroupScopeServiceImpl implements SaasPermissionGroupScopeService {
private final SaasPermissionGroupScopeDao saasPermissionGroupScopeDao;
@Override
@Transactional(rollbackFor = Exception.class)
public void saveOrUpdate(List<SaasPermissionGroupScope> scopes) {
if (CollectionUtils.isEmpty(scopes)) {
return;
}
List<SaasPermissionGroupScope> exists = saasPermissionGroupScopeDao.lambdaQuery()
.in(SaasPermissionGroupScope::getPgroupId, scopes.stream().map(SaasPermissionGroupScope::getPgroupId).distinct().sorted().collect(Collectors.toList()))
.eq(SaasPermissionGroupScope::getIsDelete, TableIsDeleteEnum.NORMAL.value).list();
Collection<SaasPermissionGroupScope> insertList = CollectionUtils.subtract(scopes, exists);
Collection<SaasPermissionGroupScope> deleteList = CollectionUtils.subtract(exists, scopes);
if (CollectionUtils.isNotEmpty(insertList)) {
saasPermissionGroupScopeDao.saveBatch(insertList);
}
if (CollectionUtils.isNotEmpty(deleteList)) {
saasPermissionGroupScopeDao.removeByIds(deleteList.stream().map(SaasPermissionGroupScope::getId).sorted().collect(Collectors.toList()));
}
}
}

View File

@ -2,7 +2,7 @@ package cn.axzo.tyr.server.service.impl;
import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum;
import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation;
import cn.axzo.tyr.server.repository.service.SaasPgroupPermissionRelationDao;
import cn.axzo.tyr.server.repository.dao.SaasPgroupPermissionRelationDao;
import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -18,24 +18,24 @@ import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class SaasPgroupPermissionRelationServiceImpl implements SaasPgroupPermissionRelationService {
private final SaasPgroupPermissionRelationDao saasPgroupPermissionRelationDao;
private final SaasPgroupPermissionRelationDao saasPgroupPermissionRelationDao;
@Override
@Transactional(rollbackFor = Exception.class)
public void saveOrUpdate(List<SaasPgroupPermissionRelation> relations) {
if (CollectionUtils.isNotEmpty(relations)) {
return;
}
List<SaasPgroupPermissionRelation> exists = saasPgroupPermissionRelationDao.lambdaQuery()
.in(SaasPgroupPermissionRelation::getGroupId, relations.stream().map(SaasPgroupPermissionRelation::getGroupId).distinct().sorted().collect(Collectors.toList()))
.eq(SaasPgroupPermissionRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list();
Collection<SaasPgroupPermissionRelation> insertList = CollectionUtils.subtract(relations, exists);
Collection<SaasPgroupPermissionRelation> deleteList = CollectionUtils.subtract(exists, relations);
if (CollectionUtils.isNotEmpty(insertList)) {
saasPgroupPermissionRelationDao.saveBatch(insertList);
}
if (CollectionUtils.isNotEmpty(deleteList)) {
saasPgroupPermissionRelationDao.removeByIds(deleteList.stream().map(SaasPgroupPermissionRelation::getId).sorted().collect(Collectors.toList()));
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void saveOrUpdate(List<SaasPgroupPermissionRelation> relations) {
if (CollectionUtils.isEmpty(relations)) {
return;
}
List<SaasPgroupPermissionRelation> exists = saasPgroupPermissionRelationDao.lambdaQuery()
.in(SaasPgroupPermissionRelation::getGroupId, relations.stream().map(SaasPgroupPermissionRelation::getGroupId).distinct().sorted().collect(Collectors.toList()))
.eq(SaasPgroupPermissionRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list();
Collection<SaasPgroupPermissionRelation> insertList = CollectionUtils.subtract(relations, exists);
Collection<SaasPgroupPermissionRelation> deleteList = CollectionUtils.subtract(exists, relations);
if (CollectionUtils.isNotEmpty(insertList)) {
saasPgroupPermissionRelationDao.saveBatch(insertList);
}
if (CollectionUtils.isNotEmpty(deleteList)) {
saasPgroupPermissionRelationDao.removeByIds(deleteList.stream().map(SaasPgroupPermissionRelation::getId).collect(Collectors.toList()));
}
}
}

View File

@ -1,12 +1,15 @@
package cn.axzo.tyr.server.service.impl;
import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum;
import cn.axzo.framework.domain.web.BizException;
import cn.axzo.framework.domain.web.code.BaseCode;
import cn.axzo.tyr.client.model.enums.PermissionGroupType;
import cn.axzo.tyr.server.repository.entity.SaasPermissionGroup;
import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation;
import cn.axzo.tyr.server.repository.service.SaasPermissionGroupDao;
import cn.axzo.tyr.server.repository.service.SaasPgroupRoleRelationDao;
import cn.axzo.tyr.server.repository.dao.SaasPermissionGroupDao;
import cn.axzo.tyr.server.repository.dao.SaasPgroupRoleRelationDao;
import cn.axzo.tyr.server.service.SaasPgroupRoleRelationService;
import cn.hutool.json.JSONUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
@ -22,32 +25,23 @@ import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class SaasPgroupRoleRelationServiceImpl implements SaasPgroupRoleRelationService {
private final SaasPgroupRoleRelationDao saasPgroupRoleRelationDao;
private final SaasPermissionGroupDao saasPermissionGroupDao;
private final SaasPgroupRoleRelationDao saasPgroupRoleRelationDao;
@Override
@Transactional(rollbackFor = Exception.class)
public void saveOrUpdateCommon(SaasPgroupRoleRelation commonRelation) {
List<SaasPgroupRoleRelation> relations = saasPgroupRoleRelationDao.lambdaQuery().eq(SaasPgroupRoleRelation::getRoleId, commonRelation.getRoleId())
.eq(SaasPgroupRoleRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list();
if (CollectionUtils.isEmpty(relations)) {
saasPgroupRoleRelationDao.save(commonRelation);
return;
}
List<SaasPgroupRoleRelation> prr = relations.stream().filter(e -> Objects.equals(commonRelation.getGroupId(), e.getGroupId())).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(prr)) {
// 通用权限集已经 存在
return;
}
List<Long> permissionGroupIds = relations.stream().map(SaasPgroupRoleRelation::getGroupId).sorted().collect(Collectors.toList());
List<SaasPermissionGroup> commonGroups = saasPermissionGroupDao.lambdaQuery().in(SaasPermissionGroup::getId, permissionGroupIds)
.eq(SaasPermissionGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value)
.eq(SaasPermissionGroup::getIsCommon, PermissionGroupType.COMMON.getCode()).list();
if (CollectionUtils.isNotEmpty(commonGroups)) {
Set<Long> commonGroupIds = commonGroups.stream().map(SaasPermissionGroup::getId).collect(Collectors.toSet());
// 移除以前的通用权限集
saasPgroupRoleRelationDao.removeByIds(relations.stream().filter(e -> commonGroupIds.contains(e.getGroupId())).collect(Collectors.toList()));
}
saasPgroupRoleRelationDao.save(commonRelation);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void saveOrUpdateCommon(SaasPgroupRoleRelation commonRelation) {
List<SaasPgroupRoleRelation> relations = saasPgroupRoleRelationDao.lambdaQuery().eq(SaasPgroupRoleRelation::getRoleId, commonRelation.getRoleId())
.eq(SaasPgroupRoleRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list();
if (CollectionUtils.isEmpty(relations)) {
saasPgroupRoleRelationDao.save(commonRelation);
return;
}
List<SaasPgroupRoleRelation> prr = relations.stream().filter(e -> Objects.equals(commonRelation.getGroupId(), e.getGroupId())).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(prr)) {
// 通用权限集已经 存在
return;
}else {
throw new BizException(BaseCode.BAD_REQUEST,"传入的权限集id与已存在的通用权限集id不一致 req{}", JSONUtil.toJsonStr(commonRelation));
}
}
}

View File

@ -2,7 +2,7 @@ package cn.axzo.tyr.server.service.impl;
import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum;
import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation;
import cn.axzo.tyr.server.repository.service.SaasRoleGroupRelationDao;
import cn.axzo.tyr.server.repository.dao.SaasRoleGroupRelationDao;
import cn.axzo.tyr.server.service.SaasRoleGroupRelationService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -18,27 +18,28 @@ import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class SaasRoleGroupRelationServiceImpl implements SaasRoleGroupRelationService {
private final SaasRoleGroupRelationDao saasRoleGroupRelationDao;
@Override
@Transactional(rollbackFor = Exception.class)
public void saveOrUpdate(List<SaasRoleGroupRelation> relations) {
if (CollectionUtils.isEmpty(relations)) {
return;
}
List<SaasRoleGroupRelation> exists = saasRoleGroupRelationDao.lambdaQuery()
.in(SaasRoleGroupRelation::getRoleId, relations.stream().map(SaasRoleGroupRelation::getRoleId).distinct().sorted().collect(Collectors.toList()))
.eq(SaasRoleGroupRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list();
if (CollectionUtils.isEmpty(exists)) {
saasRoleGroupRelationDao.saveBatch(relations);
return;
}
Collection<SaasRoleGroupRelation> insertList = CollectionUtils.subtract(relations, exists);
Collection<SaasRoleGroupRelation> deleteList = CollectionUtils.subtract(exists, relations);
if (CollectionUtils.isNotEmpty(insertList)) {
saasRoleGroupRelationDao.saveBatch(insertList);
}
if (CollectionUtils.isNotEmpty(deleteList)) {
saasRoleGroupRelationDao.removeByIds(deleteList.stream().map(SaasRoleGroupRelation::getId).sorted().collect(Collectors.toList()));
}
}
private final SaasRoleGroupRelationDao saasRoleGroupRelationDao;
@Override
@Transactional(rollbackFor = Exception.class)
public void saveOrUpdate(List<SaasRoleGroupRelation> relations) {
if (CollectionUtils.isEmpty(relations)) {
return;
}
List<SaasRoleGroupRelation> exists = saasRoleGroupRelationDao.lambdaQuery()
.in(SaasRoleGroupRelation::getRoleId, relations.stream().map(SaasRoleGroupRelation::getRoleId).distinct().sorted().collect(Collectors.toList()))
.eq(SaasRoleGroupRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list();
if (CollectionUtils.isEmpty(exists)) {
saasRoleGroupRelationDao.saveBatch(relations);
return;
}
Collection<SaasRoleGroupRelation> insertList = CollectionUtils.subtract(relations, exists);
Collection<SaasRoleGroupRelation> deleteList = CollectionUtils.subtract(exists, relations);
if (CollectionUtils.isNotEmpty(insertList)) {
saasRoleGroupRelationDao.saveBatch(insertList);
}
if (CollectionUtils.isNotEmpty(deleteList)) {
saasRoleGroupRelationDao.removeByIds(deleteList.stream().map(SaasRoleGroupRelation::getId).collect(Collectors.toList()));
}
}
}

View File

@ -1,13 +1,13 @@
package cn.axzo.tyr.server.service.impl;
import java.util.Date;
import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum;
import cn.axzo.framework.domain.web.BizException;
import cn.axzo.framework.domain.web.code.BaseCode;
import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq;
import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO;
import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation;
import cn.axzo.tyr.server.repository.entity.SaasRoleGroup;
import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation;
import cn.axzo.tyr.server.repository.service.*;
import cn.axzo.tyr.server.repository.dao.*;
import cn.axzo.tyr.server.service.SaasRoleGroupService;
import cn.hutool.core.bean.BeanUtil;
import lombok.RequiredArgsConstructor;
@ -56,7 +56,7 @@ public class SaasRoleGroupServiceImpl implements SaasRoleGroupService {
return new ArrayList<>();
}
List<SaasRoleGroupRelation> saasRoleGroupRelations = saasRoleGroupRelationDao.lambdaQuery()
.in(SaasRoleGroupRelation::getSaasRoleGroupId, groups.stream().map(SaasRoleGroup::getId))
.in(SaasRoleGroupRelation::getSaasRoleGroupId, groups.stream().map(SaasRoleGroup::getId).collect(Collectors.toList()))
.eq(SaasRoleGroupRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list();
Map<Long, List<Long>> groupRoleMap = saasRoleGroupRelations.stream().collect(Collectors.groupingBy(SaasRoleGroupRelation::getSaasRoleGroupId, Collectors.mapping(SaasRoleGroupRelation::getRoleId, Collectors.toList())));
List<SaasRoleGroupVO> results = groups.stream()
@ -73,7 +73,7 @@ public class SaasRoleGroupServiceImpl implements SaasRoleGroupService {
}
@Override
public void saveOrUpdate(SaasRoleGroupVO req) {
public Long saveOrUpdate(SaasRoleGroupVO req) {
// 拼接ouTypeCode字符串
String ouTypeCodeStr = null;
if (CollectionUtils.isNotEmpty(req.getOuTypeCode())) {
@ -85,21 +85,29 @@ public class SaasRoleGroupServiceImpl implements SaasRoleGroupService {
saasRoleGroup.setOuTypeCode(ouTypeCodeStr);
saasRoleGroup.setName(req.getName());
saasRoleGroup.setSort(req.getSort());
saasRoleGroup.setWorkspaceId(req.getWorkspaceId() != null ? req.getWorkspaceId():-1l);
saasRoleGroup.setOuId(req.getOuId() != null ? req.getOuId():-1l);
saasRoleGroupDao.saveOrUpdate(saasRoleGroup);
return saasRoleGroup.getId();
}
/**
* 只有当分组下面角色为空时才能删除
* @param ids
*/
@Override
public void delete(Long id) {
// 删除分组
// 删除角色分组关联关系
//
// 删除权限分组关联关系
// 删除权限
// 删除权限集关联关系
// 删除权限集
public void delete(List<Long> ids) {
if (CollectionUtils.isEmpty(ids)) {
return;
}
int relationCount = saasRoleGroupRelationDao.lambdaQuery()
.in(SaasRoleGroupRelation::getSaasRoleGroupId, ids)
.eq(SaasRoleGroupRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value)
.count();
if (relationCount > 0) {
throw new BizException(BaseCode.BAD_REQUEST, "分组关联角色,不能删除");
}
saasRoleGroupDao.delete(ids);
}
}

View File

@ -0,0 +1,48 @@
package cn.axzo.tyr.server.service.impl;
import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserRelationDTO;
import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam;
import cn.axzo.tyr.server.repository.dao.SaasRoleUserRelationDao;
import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation;
import cn.axzo.tyr.server.service.SaasRoleUserRelationService;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @author haiyangjin
* @date 2023/9/14
*/
@Slf4j
@Service
public class SaasRoleUserRelationServiceImpl implements SaasRoleUserRelationService {
@Resource
private SaasRoleUserRelationDao saasRoleUserRelationDao;
@Override
public List<SaasRoleUserRelationDTO> list(RoleUserParam param) {
List<SaasRoleUserRelation> saasRoleUserRelations = saasRoleUserRelationDao.lambdaQuery().eq(Objects.nonNull(param.getIdentityId()), SaasRoleUserRelation::getIdentityId, param.getIdentityId())
.eq(Objects.nonNull(param.getIdentityType()), SaasRoleUserRelation::getIdentityType, param.getIdentityType())
.eq(Objects.nonNull(param.getWorkspaceId()), SaasRoleUserRelation::getWorkspaceId, param.getWorkspaceId())
.eq(Objects.nonNull(param.getOuId()), SaasRoleUserRelation::getOuId, param.getOuId())
.in(CollectionUtil.isNotEmpty(param.getRoleIds()), SaasRoleUserRelation::getRoleId, param.getRoleIds())
.eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value)
.last("LIMIT 1000")
.list();
if (CollectionUtil.isEmpty(saasRoleUserRelations)) {
return Collections.emptyList();
}
return saasRoleUserRelations.stream().map(e -> BeanUtil.copyProperties(e, SaasRoleUserRelationDTO.class)).collect(Collectors.toList());
}
}

View File

@ -10,7 +10,7 @@ import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq;
import cn.axzo.tyr.client.model.permission.PermissionPointVO;
import cn.axzo.tyr.server.controller.permission.PermissionPointController;
import cn.axzo.tyr.server.repository.entity.SaasFeature;
import cn.axzo.tyr.server.repository.service.SaasFeatureDao;
import cn.axzo.tyr.server.repository.dao.SaasFeatureDao;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import org.junit.jupiter.api.Test;
@ -44,9 +44,10 @@ public class PermissionPointTest {
public void testListTreeNode() {
PermissionPointTreeQueryReq request = new PermissionPointTreeQueryReq();
//request.setParentId(354L);
request.setKeyword("预警");
//request.setKeyword("预警");
//request.setWorkspaceType(Arrays.asList("ent"));
request.setTerminalList(Arrays.asList("NT_CMS_WEB_ENT_ZB"));
//request.setTerminalList(Arrays.asList("NT_CMS_WEB_ENT_ZB"));
request.setDelegateType(2);
ApiResult<List<PermissionPointTreeNode>> result = controller.listTreeNodes(request);
System.out.println("---------------");
System.out.println(JSON.toJSONString(result, SerializerFeature.DisableCircularReferenceDetect));
@ -71,17 +72,18 @@ public class PermissionPointTest {
PermissionPointDTO permissionPoint = new PermissionPointDTO();
permissionPoint.setFeatureName("测试合同权限点");
permissionPoint.setFeatureCode("CMS_WEB_PROJ_0158");
permissionPoint.setParentId(360L);
permissionPoint.setPath("/0/354/360/");
permissionPoint.setSort(6);
permissionPoint.setTerminal("NT_CMS_WEB_PROJ");
permissionPoint.setFeatureType(3);
permissionPoint.setAppName("tyr");
permissionPoint.setFeatureUrl("/tyr/test/permission");
permissionPoint.setNeedAuth(true);
permissionPoint.setNeedAuth(true);
//permissionPoint.setParentId(360L);
//permissionPoint.setPath("/0/354/360/");
//permissionPoint.setSort(3);
//permissionPoint.setTerminal("NT_CMS_WEB_PROJ");
permissionPoint.setTerminal("NT_CMS_WEB_ENT_ZB");
permissionPoint.setFeatureType(1);
//permissionPoint.setAppName("tyr");
//permissionPoint.setFeatureUrl("/tyr/test/permission");
//permissionPoint.setNeedAuth(true);
//permissionPoint.setNeedAuth(true);
System.out.println(JSON.toJSONString(permissionPoint));
//controller.savePermissionPoint(permissionPoint);
controller.savePermissionPoint(permissionPoint);
}
@Test
@ -106,8 +108,8 @@ public class PermissionPointTest {
@Test
public void testMove() {
PermissionPointMoveRequest request = new PermissionPointMoveRequest();
request.setPermissionId(360L);
request.setParentId(354L);
request.setPermissionId(3483L);
request.setParentId(360L);
request.setSort(1);
ApiResult<Void> result = controller.move(request);
System.out.println(JSON.toJSONString(result));