From b4fd4db646d32ee75afcefaf54e306021da3935c Mon Sep 17 00:00:00 2001 From: FatttSnake Date: Thu, 1 Jun 2023 17:14:33 +0800 Subject: [PATCH] Optimized the selection of permissions --- .../permission/impl/RoleServiceImpl.java | 22 +++++++++ sql/Insert.sql | 8 ++-- ui/src/pages/power/RoleManagement.vue | 47 ++++++++++--------- 3 files changed, 50 insertions(+), 27 deletions(-) diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/service/permission/impl/RoleServiceImpl.java b/Pinnacle/src/main/java/com/cfive/pinnacle/service/permission/impl/RoleServiceImpl.java index 2f1741e..ecbbc56 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/service/permission/impl/RoleServiceImpl.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/service/permission/impl/RoleServiceImpl.java @@ -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; /** *

@@ -51,6 +54,8 @@ public class RoleServiceImpl extends ServiceImpl 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 implements IR @Override @Transactional public boolean modifyRole(Role role) { + handlePower(role); roleMapper.updateById(role); Role originalRole = getRole(role.getId()); HashSet newPowerIds = new HashSet<>(); @@ -97,4 +103,20 @@ public class RoleServiceImpl extends ServiceImpl implements IR }); return true; } + + private void handlePower(Role role) { + List powers = role.getPowers(); + Set elementIds = new HashSet<>(); + Set 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))); + } } diff --git a/sql/Insert.sql b/sql/Insert.sql index 920e56c..49585e9 100644 --- a/sql/Insert.sql +++ b/sql/Insert.sql @@ -187,28 +187,28 @@ begin; insert into t_power(id, type_id) values (3020101, 3); insert into t_operation(id, name, code, power_id, element_id, parent_id) -VALUES (3020101, '获取所有公告', 'notice:manage:get', id, 3030100, null); +VALUES (3020101, '获取所有公告', 'notice:manage:get', id, 3020100, null); commit; begin; insert into t_power(id, type_id) values (3020102, 3); insert into t_operation(id, name, code, power_id, element_id, parent_id) -VALUES (3020102, '发布公告', 'notice:manage:add', id, 3030100, null); +VALUES (3020102, '发布公告', 'notice:manage:add', id, 3020100, null); commit; begin; insert into t_power(id, type_id) values (3020103, 3); insert into t_operation(id, name, code, power_id, element_id, parent_id) -VALUES (3020103, '删除公告', 'notice:manage:delete', id, 3030100, null); +VALUES (3020103, '删除公告', 'notice:manage:delete', id, 3020100, null); commit; begin; insert into t_power(id, type_id) values (3020104, 3); insert into t_operation(id, name, code, power_id, element_id, parent_id) -VALUES (3020104, '修改公告', 'notice:manage:modify', id, 3030100, null); +VALUES (3020104, '修改公告', 'notice:manage:modify', id, 3020100, null); commit; begin; diff --git a/ui/src/pages/power/RoleManagement.vue b/ui/src/pages/power/RoleManagement.vue index ef17384..b813bca 100644 --- a/ui/src/pages/power/RoleManagement.vue +++ b/ui/src/pages/power/RoleManagement.vue @@ -12,7 +12,7 @@ - + + + + - - - @@ -204,6 +204,11 @@ export default { } menu.children.push(element) } + for (const menu of menuList) { + if (menu.children.length === 1) { + menu.children = menu.children[0].children + } + } this.powerTree = data.menuList this.dialogLoading = false } else { @@ -215,10 +220,12 @@ export default { }) }, handleSelectedPowerChange(data, checked, indeterminate) { - if (checked || indeterminate) { - this.roleForm.selectedPower.add(data.powerId) - } else { - this.roleForm.selectedPower.delete(data.powerId) + if (data.children === undefined) { + if (checked || indeterminate) { + this.roleForm.selectedPower.add(data.powerId) + } else { + this.roleForm.selectedPower.delete(data.powerId) + } } }, handleAddBtn() { @@ -235,12 +242,6 @@ export default { this.defaultSelectedPower.push(operation.powerId) this.roleForm.selectedPower.add(operation.powerId) } - for (const element of row.elements) { - this.roleForm.selectedPower.add(element.powerId) - } - for (const menu of row.menus) { - this.roleForm.selectedPower.add(menu.powerId) - } this.isAddNew = false this.dialogVisible = true },