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