refactor(权限点): 增加层级校验逻辑;增加删除产品关联

This commit is contained in:
zhansihu 2023-09-19 10:55:58 +08:00
parent 4f43435c0d
commit abf3bd7c0a
2 changed files with 54 additions and 3 deletions

View File

@ -2,9 +2,13 @@ package cn.axzo.tyr.server.repository.dao;
import cn.axzo.tyr.server.repository.entity.SaasProductModuleFeatureRelation;
import cn.axzo.tyr.server.repository.mapper.SaasProductModuleFeatureRelationMapper;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* 产品-菜单关联关系(SaasProductModuleFeatureRelation)表服务实现类
*
@ -14,5 +18,12 @@ import org.springframework.stereotype.Repository;
@Repository
public class SaasProductModuleFeatureRelationDao extends ServiceImpl<SaasProductModuleFeatureRelationMapper, SaasProductModuleFeatureRelation> {
public void removeByPermissionPointIds(List<Long> permissionPointIds) {
if (CollectionUtil.isEmpty(permissionPointIds)) {
return;
}
this.remove(new LambdaQueryWrapper<SaasProductModuleFeatureRelation>()
.in(SaasProductModuleFeatureRelation::getFeatureId, permissionPointIds));
}
}

View File

@ -18,6 +18,8 @@ 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.common.util.Throws;
import cn.axzo.tyr.server.repository.dao.SaasProductModuleFeatureRelationDao;
import cn.axzo.tyr.server.repository.entity.SaasFeature;
import cn.axzo.tyr.server.repository.dao.SaasFeatureDao;
import cn.axzo.tyr.server.repository.dao.SaasPgroupPermissionRelationDao;
@ -36,6 +38,8 @@ import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import static cn.axzo.tyr.client.model.enums.FeatureType.BUTTON;
import static cn.axzo.tyr.client.model.enums.FeatureType.MODULE;
import static cn.axzo.tyr.server.common.constants.PermissionConstant.*;
/**
@ -53,6 +57,7 @@ public class PermissionPointServiceImpl implements PermissionPointService {
private final SaasFeatureDao saasFeatureDao;
private final SaasBasicDictService saasBasicDictService;
private final SaasPgroupPermissionRelationDao saasPgroupPermissionRelationDao;
private final SaasProductModuleFeatureRelationDao saasProductModuleFeatureRelationDao;
@Override
public List<PermissionPointTreeNode> listTreeNodes(PermissionPointTreeQueryReq request) {
@ -330,7 +335,7 @@ public class PermissionPointServiceImpl implements PermissionPointService {
SaasFeature saasFeature = BeanMapper.copyBean(dto, SaasFeature.class);
saasFeature.setFitOuTypeBit(dto.mergeFitOuTypeBit());
saasFeature.setFitOuNodeTypeBit(dto.mergeFitOuNodeTypeBit());
SaasFeature parent;
SaasFeature parent = null;
if (dto.getParentId() == null || dto.getParentId() < 1) {
saasFeature.setParentId(0L);
saasFeature.setPath(FEATURE_TOP_PATH);
@ -340,6 +345,8 @@ public class PermissionPointServiceImpl implements PermissionPointService {
saasFeature.setPath(parent.getPath() + parent.getId() + FEATURE_PATH_DELIMITER);
saasFeature.setParentBusinessNo(parent.getBusinessNo());
}
FeatureType featureType = FeatureType.apply(dto.getFeatureType());
checkParentType(featureType, parent);
//生成biz_no
saasFeature.setBusinessNo(FEATURE_BIZ_NO_PREFIX + System.currentTimeMillis());
@ -351,6 +358,34 @@ public class PermissionPointServiceImpl implements PermissionPointService {
return dto;
}
private void checkParentType(FeatureType featureType, SaasFeature parent) {
//检查父级元素类型
switch (featureType) {
case MODULE:
if (parent != null) {
Throws.paramException(BaseCode.BAD_REQUEST, "菜单必须为顶级");
}
break;
case MENU:
//MENU PAGE相同逻辑
case PAGE:
if (parent == null
|| FeatureType.apply(parent.getFeatureType()) == BUTTON) {
Throws.paramException(BaseCode.BAD_REQUEST, "页面层级错误");
}
break;
case BUTTON:
if (parent == null
|| FeatureType.apply(parent.getFeatureType()) == MODULE
|| FeatureType.apply(parent.getFeatureType()) == BUTTON) {
Throws.paramException(BaseCode.BAD_REQUEST, "按钮层级错误");
}
break;
default:
Throws.paramException(BaseCode.BAD_REQUEST, "不支持的元素类型");
}
}
@Transactional(rollbackFor = Throwable.class)
@Override
public List<String> delete(Long permissionPointId) {
@ -360,7 +395,7 @@ public class PermissionPointServiceImpl implements PermissionPointService {
//删除自己
this.saasFeatureDao.removeById(permissionPointId);
delIds.add(feature.getId());
if (feature.getFeatureType().equals(FeatureType.BUTTON.getCode())) {
if (feature.getFeatureType().equals(BUTTON.getCode())) {
//bizNo返回用于删除路由
bizNoList.add(feature.getBusinessNo());
}
@ -371,12 +406,14 @@ public class PermissionPointServiceImpl implements PermissionPointService {
this.saasFeatureDao.removeByIds(childrenIds);
delIds.addAll(childrenIds);
List<String> buttonBizNoList = children.stream()
.filter(x -> x.getFeatureType().equals(FeatureType.BUTTON.getCode()))
.filter(x -> x.getFeatureType().equals(BUTTON.getCode()))
.map(SaasFeature::getBusinessNo)
.collect(Collectors.toList());
bizNoList.addAll(buttonBizNoList);
}
//删除关联数据
this.saasPgroupPermissionRelationDao.removeByPermissionPointIds(delIds);
this.saasProductModuleFeatureRelationDao.removeByPermissionPointIds(delIds);
return bizNoList;
}
@ -458,6 +495,9 @@ public class PermissionPointServiceImpl implements PermissionPointService {
throw new BizException(BaseCode.BAD_REQUEST, "不允许移到子级");
}
}
//检查元素类型层级
FeatureType featureType = FeatureType.apply(feature.getFeatureType());
checkParentType(featureType, parent);
//当前节点更新
SaasFeature entity = new SaasFeature();