refactor(权限点): 级联删除子节点,关联删除权限集

This commit is contained in:
zhansihu 2023-09-12 10:40:39 +08:00
parent 7c1a1f3959
commit 61d15ede26
5 changed files with 50 additions and 7 deletions

View File

@ -20,4 +20,6 @@ public interface SaasFeatureDao extends IService<SaasFeature> {
List<SaasFeature> listByParentId(Long parentId);
void updateSort(Long permissionId, int switchIndex);
List<SaasFeature> listLikePath(String path);
}

View File

@ -4,11 +4,18 @@ import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation;
import cn.axzo.tyr.server.repository.entity.SaasRole;
import cn.axzo.tyr.server.repository.mapper.SaasPgroupPermissionRelationMapper;
import cn.axzo.tyr.server.repository.mapper.SaasRoleMapper;
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;
@Repository
public class SaasPgroupPermissionRelationDao extends ServiceImpl<SaasPgroupPermissionRelationMapper, SaasPgroupPermissionRelation> {
public void removeByPermissionPointIds(List<Long> permissionPointIds) {
this.remove(new LambdaQueryWrapper<SaasPgroupPermissionRelation>()
.in(SaasPgroupPermissionRelation::getFeatureId, permissionPointIds));
}
}

View File

@ -37,4 +37,9 @@ public class SaasFeatureDaoImpl extends ServiceImpl<SaasFeatureMapper, SaasFeatu
public void updateSort(Long permissionId, int sort) {
this.update(new LambdaUpdateWrapper<SaasFeature>().set(SaasFeature::getSort, sort).eq(SaasFeature::getId, permissionId));
}
@Override
public List<SaasFeature> listLikePath(String path) {
return this.list(new LambdaQueryWrapper<SaasFeature>().likeRight(SaasFeature::getPath, path));
}
}

View File

@ -6,6 +6,7 @@ import cn.axzo.framework.domain.web.BizException;
import cn.axzo.framework.domain.web.code.BaseCode;
import cn.axzo.tyr.client.model.DictTypeFiledEnum;
import cn.axzo.tyr.client.model.DictWorkSpaceTypeEnum;
import cn.axzo.tyr.client.model.dict.request.BasicDictNodeReq;
import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq;
import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp;
import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp;
@ -17,6 +18,7 @@ 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.service.PermissionPointService;
import cn.axzo.tyr.server.service.SaasBasicDictService;
import cn.hutool.core.collection.CollectionUtil;
@ -56,6 +58,7 @@ 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) {
@ -200,11 +203,21 @@ public class PermissionPointServiceImpl implements PermissionPointService {
vo.setFeatureTypeDesc(FeatureType.apply(vo.getFeatureType()).getDesc());
//补充上级信息
//TODO:@Zhan 依赖字典接口构建上级
//最顶级二层
BasicDictNodeReq terminalReq = new BasicDictNodeReq();
terminalReq.setCode(feature.getTerminal());
terminalReq.setType(DictTypeFiledEnum.TERMINAL);
BasicDictNodeResp terminal = saasBasicDictDao.getBasicDictNode(terminalReq);
terminalReq.setType(DictTypeFiledEnum.WORKSPACE);
terminalReq.setCode(terminal.getWorkspaceType());
BasicDictNodeResp workspace = saasBasicDictDao.getBasicDictNode(terminalReq);
List<String> pathName = new ArrayList<>();
pathName.add(workspace.getName());
pathName.add(terminal.getName());
if (vo.getParentId() == null || vo.getParentId() == 0) {
//没有parent直接挂在工作台下
vo.setParentName("");
vo.setParentName(terminal.getName());
vo.setPathName(pathName);
return vo;
}
@ -269,9 +282,13 @@ public class PermissionPointServiceImpl implements PermissionPointService {
parent = new SaasFeature();
parent.setPath(FEATURE_TOP_PATH);
parent.setBusinessNo("0");
//设置为0便于下面查询
parent.setParentId(0L);
} else {
parent = this.saasFeatureDao.getById(dto.getParentId());
}
//计算子节点作为sort
//生成biz_no
saasFeature.setBusinessNo(FEATURE_BIZ_NO_PREFIX + System.currentTimeMillis());
saasFeature.setParentBusinessNo(parent.getBusinessNo());
@ -284,9 +301,20 @@ public class PermissionPointServiceImpl implements PermissionPointService {
@Transactional(rollbackFor = Throwable.class)
@Override
public void delete(Long permissionId) {
this.saasFeatureDao.removeById(permissionId);
//TODO:@Zhan 删除关联数据 - 权限集合
public void delete(Long permissionPointId) {
List<Long> delIds = new ArrayList<>();
SaasFeature feature = getAndCheck(permissionPointId);
//删除自己
this.saasFeatureDao.removeById(permissionPointId);
delIds.add(feature.getId());
//删除所有子节点
List<SaasFeature> children = this.saasFeatureDao.listLikePath(feature.getPath() + feature.getId() + FEATURE_PATH_DELIMITER);
if (CollectionUtil.isNotEmpty(children)) {
List<Long> childrenIds = children.stream().map(SaasFeature::getId).collect(Collectors.toList());
this.saasFeatureDao.removeByIds(childrenIds);
delIds.addAll(childrenIds);
}
this.saasPgroupPermissionRelationDao.removeByPermissionPointIds(delIds);
}
@Transactional(rollbackFor = Throwable.class)

View File

@ -77,7 +77,8 @@ public class PermissionPointTest {
permissionPoint.setFeatureUrl("/tyr/test/permission");
permissionPoint.setNeedAuth(true);
permissionPoint.setNeedAuth(true);
controller.savePermissionPoint(permissionPoint);
System.out.println(JSON.toJSONString(permissionPoint));
//controller.savePermissionPoint(permissionPoint);
}
@Test
@ -117,7 +118,7 @@ public class PermissionPointTest {
@Test
public void testDelete() {
Long permissionId = 3478L;
Long permissionId = 360L;
controller.deletePermissionPoint(permissionId);
}