|
@@ -775,13 +775,13 @@ public class AdminUserLogic {
|
|
|
/**
|
|
|
* 根据登录帐号查询权限模块
|
|
|
*/
|
|
|
- public List<AdminModuleTree> queryAdminModule(String adminUserId) {
|
|
|
+ public List<AdminModuleTree> queryAdminModule(String adminUserId, String parentAdminRoleId) {
|
|
|
//String adminUserId = CommonUtils.getUserId(request);
|
|
|
AdminUser adminUser = adminUserService.getById(adminUserId);
|
|
|
if (adminUser.getUserName().equals("admin")) {
|
|
|
return this.queryAdminModuleTree(null, true, null, null);
|
|
|
} else {
|
|
|
- return this.queryAdminModuleTree(adminUser.getRoleId(), false, null, adminUser);
|
|
|
+ return this.queryAdminModuleTree(StringUtils.isBlank(parentAdminRoleId) ? adminUser.getRoleId() : parentAdminRoleId, false, null, adminUser);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -791,11 +791,12 @@ public class AdminUserLogic {
|
|
|
@Transactional
|
|
|
public void grantModules(AdminWebsitGrantBean adminWebsitGrantBean) {
|
|
|
String roleId = adminWebsitGrantBean.getAdminRoleId();
|
|
|
- //1.清空该角色的权限
|
|
|
- adminUserModuleRelaService.lambdaUpdate().eq(AdminUserModuleRela::getAdminRoleId, roleId).remove();
|
|
|
+ final Integer subSize = adminRoleService.lambdaQuery()
|
|
|
+ .eq(AdminRole::getParentRoleId, roleId)
|
|
|
+ .count();
|
|
|
|
|
|
- //2.生成权限
|
|
|
- List<AdminUserModuleRela> list = new ArrayList<>();
|
|
|
+ //1.生成权限
|
|
|
+ List<AdminUserModuleRela> newList = new ArrayList<>();
|
|
|
for (String adminModuleId : adminWebsitGrantBean.getAdminModuleIds()) {
|
|
|
AdminUserModuleRela adminUserModuleRela = new AdminUserModuleRela();
|
|
|
adminUserModuleRela.setAdminRoleId(roleId);
|
|
@@ -803,7 +804,7 @@ public class AdminUserLogic {
|
|
|
adminUserModuleRela.setStatus(true);
|
|
|
adminUserModuleRela.setAdminModuleId(adminModuleId);
|
|
|
adminUserModuleRela.setFlag(1);
|
|
|
- list.add(adminUserModuleRela);
|
|
|
+ newList.add(adminUserModuleRela);
|
|
|
}
|
|
|
for (String adminModuleId : adminWebsitGrantBean.getAdminModuleIds2()) {
|
|
|
AdminUserModuleRela adminUserModuleRela = new AdminUserModuleRela();
|
|
@@ -812,9 +813,57 @@ public class AdminUserLogic {
|
|
|
adminUserModuleRela.setStatus(true);
|
|
|
adminUserModuleRela.setAdminModuleId(adminModuleId);
|
|
|
adminUserModuleRela.setFlag(0);
|
|
|
- list.add(adminUserModuleRela);
|
|
|
+ newList.add(adminUserModuleRela);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 当前角色授权存在子角色,需要对比新旧数据,新加权限不处理,找出去掉的权限清除子角色的相应权限
|
|
|
+ if (subSize > 0) {
|
|
|
+ final List<AdminUserModuleRela> oldRelaList = adminUserModuleRelaService.lambdaQuery().eq(AdminUserModuleRela::getAdminRoleId, roleId).list();
|
|
|
+ // 对比出新数据没,旧数据有的roleId
|
|
|
+ final List<String> newModuleIds = newList.stream().map(AdminUserModuleRela::getAdminModuleId).collect(Collectors.toList());
|
|
|
+ List<String> removeSubModuleList = new ArrayList<>();
|
|
|
+ for (AdminUserModuleRela oldRela : oldRelaList) {
|
|
|
+ if (newModuleIds.contains(oldRela.getAdminModuleId())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ removeSubModuleList.add(oldRela.getAdminModuleId());
|
|
|
+ }
|
|
|
+ if (CollectionUtil.isNotEmpty(removeSubModuleList)) {
|
|
|
+ // 删除子角色关联菜单
|
|
|
+ this.removeRelaSubModule(roleId, removeSubModuleList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //2.清空该角色的权限
|
|
|
+ adminUserModuleRelaService.lambdaUpdate().eq(AdminUserModuleRela::getAdminRoleId, roleId).remove();
|
|
|
+
|
|
|
+ adminUserModuleRelaService.saveBatch(newList);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 递归执行删除子角色关联菜单
|
|
|
+ private void removeRelaSubModule(String parentRoleId, List<String> removeSubModuleList) {
|
|
|
+ final List<AdminRole> subRoleList = adminRoleService.lambdaQuery()
|
|
|
+ .select(AdminRole::getAdminRoleId)
|
|
|
+ .eq(AdminRole::getParentRoleId, parentRoleId)
|
|
|
+ .list();
|
|
|
+
|
|
|
+ if (CollectionUtil.isNotEmpty(subRoleList)) {
|
|
|
+ final List<String> roleIds = subRoleList.stream()
|
|
|
+ .map(AdminRole::getAdminRoleId)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ for (String moduleId : removeSubModuleList) {
|
|
|
+ adminUserModuleRelaService.lambdaUpdate()
|
|
|
+ .eq(AdminUserModuleRela::getAdminModuleId, moduleId)
|
|
|
+ .in(AdminUserModuleRela::getAdminRoleId, roleIds)
|
|
|
+ .remove();
|
|
|
+ }
|
|
|
+
|
|
|
+ for (String roleId : roleIds) {
|
|
|
+ this.removeRelaSubModule(roleId, removeSubModuleList);
|
|
|
+ }
|
|
|
}
|
|
|
- adminUserModuleRelaService.saveBatch(list);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
/**
|