From 29febf388aa86d87198fe82e4af7eb88567d0d65 Mon Sep 17 00:00:00 2001
From: chenjiantian <214228265@qq.com>
Date: 星期二, 18 一月 2022 16:59:23 +0800
Subject: [PATCH] 权限管理
---
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AdminController.java | 26 +++++++------
ximon-admin/src/main/java/com/sandu/ximon/admin/service/RoleService.java | 4 +-
ximon-admin/src/main/java/com/sandu/ximon/admin/service/MenuService.java | 25 ++++++++++++
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/MenuController.java | 17 +++++++-
ximon-admin/src/main/java/com/sandu/ximon/admin/service/AdminService.java | 43 +++++++++++++++++++--
5 files changed, 93 insertions(+), 22 deletions(-)
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AdminController.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AdminController.java
index 0d1ce6e..7cce0e2 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AdminController.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AdminController.java
@@ -9,7 +9,6 @@
import com.sandu.common.domain.ResponseVO;
import com.sandu.common.enums.AdminStatusStatus;
import com.sandu.common.enums.ResponseStatusEnums;
-import com.sandu.common.execption.BusinessException;
import com.sandu.common.object.BaseConditionVO;
import com.sandu.common.security.LoginUserInfo;
import com.sandu.common.security.annotation.AnonymousAccess;
@@ -36,7 +35,10 @@
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
-import java.util.*;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import java.util.stream.Collectors;
/**
@@ -142,9 +144,9 @@
}
// @PreAuthorize("@el.check('admin:edit')")
+
/**
* 淇敼绠$悊鍛樹俊鎭�
- *
*/
@PostMapping("/update/{adminId}")
public ResponseVO<Object> updateAdmin(@RequestBody AdminParam param, @PathVariable Long adminId) {
@@ -158,8 +160,6 @@
/**
* 淇敼鎴戠殑瀵嗙爜
- * @param param
- * @return
*/
@PutMapping("/updateMyPassword")
public ResponseVO<Object> updateMyPassword(@Validated @RequestBody PwdParam param) {
@@ -181,13 +181,15 @@
// return ResponseUtil.success(null);
// }
-// @DeleteMapping("/{id}")
-// @PreAuthorize("@el.check('admin:del')")
-// public ResponseVO<Object> delete(@PathVariable Long id) {
-// checkLevel(id);
-// adminService.deleteAdmin(id);
-// return ResponseUtil.success(null);
-// }
+ @PostMapping("/del/{adminId}")
+ public ResponseVO<Object> deleteAdmin(@PathVariable Long adminId) {
+ boolean result = adminService.deleteAdmin(adminId);
+ if (result) {
+ return ResponseUtil.success("淇敼鎴愬姛");
+ } else {
+ return ResponseUtil.fail("淇敼澶辫触");
+ }
+ }
// /**
// * 缁欑鐞嗗憳鍒嗛厤瑙掕壊
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/MenuController.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/MenuController.java
index abc710a..dc7e9e6 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/MenuController.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/MenuController.java
@@ -41,13 +41,24 @@
boolean result = menuService.updateMenu(menuId,param);
if (result) {
- return ResponseUtil.success("娣诲姞鎴愬姛");
+ return ResponseUtil.success("缂栬緫鎴愬姛");
} else {
- return ResponseUtil.fail("娣诲姞澶辫触");
+ return ResponseUtil.fail("缂栬緫澶辫触");
}
}
- @PostMapping
+ @PostMapping("/del/{menuId}")
+ public ResponseVO<Object> delMenu(@PathVariable Long menuId) {
+
+ boolean result = menuService.delMenu(menuId);
+ if (result) {
+ return ResponseUtil.success("鍒犻櫎鎴愬姛");
+ } else {
+ return ResponseUtil.fail("鍒犻櫎澶辫触");
+ }
+ }
+
+ @PostMapping("/add")
public ResponseVO<Object> addMenu(@Validated @RequestBody MenuParam param) {
boolean result = menuService.addMenu(param);
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/AdminService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/AdminService.java
index 671ed5a..735a41a 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/AdminService.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/AdminService.java
@@ -71,29 +71,43 @@
return true;
}
+ @Transactional(rollbackFor = Exception.class)
public boolean updateAdmin(Long adminId, AdminParam param) {
Admin admin = getById(adminId);
- if(admin == null){
+ if (admin == null) {
throw new BusinessException("鎵句笉鍒扮鐞嗗憳");
}
List<Role> roles = roleService.listByAdminId(admin.getId());
- if(CollectionUtil.isEmpty(roles)){
+ if (CollectionUtil.isEmpty(roles)) {
throw new BusinessException("褰撳墠鐢ㄦ埛娌℃湁瑙掕壊");
}
List<Integer> levels = roles.stream().map(Role::getLevel).collect(Collectors.toList());
int min = Collections.min(levels);
roleService.assertLevels(min);
+
Admin update = new Admin();
update.setId(adminId);
update.setPassword(passwordEncoder.encode(param.getPassword()));
update.setNickName(param.getNickName());
update.setMobile(param.getMobile());
update.setNote(param.getNote());
- return updateById(update);
+ if (!updateById(update)) {
+ throw new BusinessException("缂栬緫绠$悊鍛樺け璐�");
+ }
+
+ adminRoleRelationService.remove(Wrappers.lambdaQuery(AdminRoleRelation.class).eq(AdminRoleRelation::getAdminId,admin));
+ AdminRoleRelation adminRoleRelation = new AdminRoleRelation();
+ adminRoleRelation.setAdminId(adminId);
+ adminRoleRelation.setRoleId(param.getRoleId());
+ if (!adminRoleRelationService.save(adminRoleRelation)) {
+ throw new BusinessException("娣诲姞绠$悊鍛樿鑹插け璐�");
+ }
+
+ return true;
}
public boolean updateMyPassword(PwdParam param) {
- if(!StrUtil.equals(param.getNewPass(),param.getConfirmPass())){
+ if (!StrUtil.equals(param.getNewPass(), param.getConfirmPass())) {
throw new BusinessException("涓ゆ瀵嗙爜涓嶄竴鑷�");
}
Long userId = SecurityUtils.getUserId();
@@ -101,7 +115,7 @@
if (admin == null) {
throw new BusinessException("鐢ㄦ埛涓嶅瓨鍦�");
}
- if(!passwordEncoder.matches(param.getOldPass(),admin.getPassword())){
+ if (!passwordEncoder.matches(param.getOldPass(), admin.getPassword())) {
throw new BusinessException("鏃у瘑鐮佷笉姝g‘");
}
Admin update = new Admin();
@@ -109,4 +123,23 @@
update.setPassword(passwordEncoder.encode(param.getNewPass()));
return updateById(update);
}
+
+ public boolean deleteAdmin(Long adminId) {
+ Admin admin = getById(adminId);
+ if (admin == null) {
+ throw new BusinessException("鎵句笉鍒扮鐞嗗憳");
+ }
+ List<Role> roles = roleService.listByAdminId(admin.getId());
+ if (CollectionUtil.isEmpty(roles)) {
+ throw new BusinessException("褰撳墠鐢ㄦ埛娌℃湁瑙掕壊");
+ }
+ List<Integer> levels = roles.stream().map(Role::getLevel).collect(Collectors.toList());
+ int min = Collections.min(levels);
+ int maxLevel = roleService.assertLevels(min);
+ if(!RoleLevelStatus.SUPER.getCode().equals(maxLevel)){
+ throw new BusinessException("鍙湁瓒呯骇绠$悊鍛樻墠鑳藉垹闄ょ敤鎴�");
+ }
+
+ return removeById(adminId);
+ }
}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/MenuService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/MenuService.java
index 96ffa7d..5516885 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/MenuService.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/MenuService.java
@@ -3,13 +3,17 @@
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.sandu.common.enums.RoleLevelStatus;
import com.sandu.common.execption.BusinessException;
import com.sandu.common.execption.EntityExistException;
import com.sandu.common.service.impl.BaseServiceImpl;
+import com.sandu.common.util.SpringContextHolder;
import com.sandu.ximon.admin.param.MenuParam;
+import com.sandu.ximon.admin.security.SecurityUtils;
import com.sandu.ximon.dao.bo.MenuNode;
import com.sandu.ximon.dao.domain.AdminRoleRelation;
import com.sandu.ximon.dao.domain.Menu;
+import com.sandu.ximon.dao.domain.Role;
import com.sandu.ximon.dao.domain.RoleMenuRelation;
import com.sandu.ximon.dao.mapper.AdminRoleRelationMapper;
import com.sandu.ximon.dao.mapper.MenuMapper;
@@ -17,6 +21,7 @@
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
+import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@@ -79,6 +84,12 @@
throw new BusinessException("鎵句笉鍒拌彍鍗曚俊鎭�");
}
+ List<Role> roles = SpringContextHolder.getBean(RoleService.class).listByAdminId(SecurityUtils.getUserId());
+ Integer roleLevel = roles.stream().map(Role::getLevel).min(Integer::compareTo).orElse(RoleLevelStatus.COMMON.getCode());
+ if(!RoleLevelStatus.SUPER.getCode().equals(roleLevel)){
+ throw new BusinessException("瓒呯骇绠$悊鍛樻墠鍙互缂栬緫鑿滃崟");
+ }
+
Menu menu = new Menu();
BeanUtils.copyProperties(param,menu);
menu.setId(menuId);
@@ -91,4 +102,18 @@
.filter(menu -> menu.getPid().equals(0L))
.map(menu -> covertMenuNode(menu, list)).collect(Collectors.toList());
}
+
+ public boolean delMenu(Long menuId) {
+ Menu one = getById(menuId);
+ if (one == null) {
+ throw new BusinessException("鎵句笉鍒拌彍鍗曚俊鎭�");
+ }
+
+ List<Role> roles = SpringContextHolder.getBean(RoleService.class).listByAdminId(SecurityUtils.getUserId());
+ Integer roleLevel = roles.stream().map(Role::getLevel).min(Integer::compareTo).orElse(RoleLevelStatus.COMMON.getCode());
+ if(!RoleLevelStatus.SUPER.getCode().equals(roleLevel)){
+ throw new BusinessException("瓒呯骇绠$悊鍛樻墠鍙互鍒犻櫎鑿滃崟");
+ }
+ return removeById(menuId);
+ }
}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/RoleService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/RoleService.java
index 266d379..8ad8b8a 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/RoleService.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/RoleService.java
@@ -117,8 +117,8 @@
/**
* 鍒ゆ柇褰撳墠瑙掕壊鑳戒笉鑳芥搷浣滅洰鏍囩敤鎴� 涓嶈鐨勮瘽鐩存帴鎶涘嚭寮傚父
- * @param roleLevel 鐩爣鐢ㄦ埛鐨勬渶澶ц鑹�
- * @return
+ * @param roleLevel 鐩爣鐢ㄦ埛鐨勬渶楂樿鑹茬瓑绾�
+ * @return 鎿嶄綔浜虹殑鏈�楂樿鑹茬瓑绾�
*/
public int assertLevels(Integer roleLevel) {
Long userId = SecurityUtils.getUserId();
--
Gitblit v1.9.3