1
0
mirror of https://github.com/FatttSnake/Pinnacle-OA.git synced 2026-04-05 23:11:24 +08:00

Optimized the selection of permissions

This commit is contained in:
2023-06-01 17:14:33 +08:00
parent 57a551ef45
commit b4fd4db646
3 changed files with 50 additions and 27 deletions

View File

@@ -1,8 +1,10 @@
package com.cfive.pinnacle.service.permission.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.cfive.pinnacle.entity.permission.Power;
import com.cfive.pinnacle.entity.permission.Role;
import com.cfive.pinnacle.entity.permission.PowerRole;
import com.cfive.pinnacle.exception.DataValidationFailedException;
import com.cfive.pinnacle.mapper.permission.RoleMapper;
import com.cfive.pinnacle.mapper.permission.PowerRoleMapper;
import com.cfive.pinnacle.service.permission.IRoleService;
@@ -13,6 +15,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* <p>
@@ -51,6 +54,8 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IR
@Override
@Transactional
public boolean addRole(Role role) {
handlePower(role);
if (roleMapper.insert(role) == 1) {
role.getPowers().forEach(power -> {
PowerRole powerRole = new PowerRole();
@@ -69,6 +74,7 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IR
@Override
@Transactional
public boolean modifyRole(Role role) {
handlePower(role);
roleMapper.updateById(role);
Role originalRole = getRole(role.getId());
HashSet<Long> newPowerIds = new HashSet<>();
@@ -97,4 +103,20 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IR
});
return true;
}
private void handlePower(Role role) {
List<Power> powers = role.getPowers();
Set<Long> elementIds = new HashSet<>();
Set<Long> menuIds = new HashSet<>();
powers.forEach(power -> {
Long powerId = power.getId();
if (powerId % 100 == 0) {
throw new DataValidationFailedException("Illegal data");
}
elementIds.add(powerId - powerId % 100);
menuIds.add(powerId - powerId % 10000);
});
elementIds.forEach(elementId -> powers.add(new Power(elementId, 2L)));
menuIds.forEach(menuId -> powers.add(new Power(menuId, 1L)));
}
}