Jelajahi Sumber

Edit @permi

tsurumure 1 tahun lalu
induk
melakukan
6d84d2d8a4

+ 0 - 1
README.md

@@ -25,7 +25,6 @@ $ cd D:\CodeJava\QuickLaunchSpring\BackendSys
 $ Start-Process javaw -ArgumentList "-Dloader.path=./libs -jar ./target/backendsys-1.0.0.jar" -RedirectStandardOutput "./target/backendsys-1.0.0.log" -RedirectStandardError "./target/backendsys-1.0.0.err.log" -NoNewWindow -Wait
 # 查看控制台
 $ Get-Content -Path "./target/backendsys-1.0.0.log" -Wait
-
 # 关闭
 $ netstat -ano | findstr 48080
 // TCP    0.0.0.0:48080     0.0.0.0:0     LISTENING      4812

+ 3 - 1
pom.xml

@@ -450,9 +450,11 @@
             </resource>
         </resources>
         <!--<finalName>backendsys</finalName>-->
+
+
         <plugins>
 
-            <!-- 如果不分包,则此处必填2 -->
+            <!-- 如果不分包,则此处必填 -->
 <!--            <plugin>-->
 <!--                <groupId>org.springframework.boot</groupId>-->
 <!--                <artifactId>spring-boot-maven-plugin</artifactId>-->

+ 23 - 6
src/main/java/com/backendsys/config/Security/service/PermissionService.java

@@ -8,6 +8,7 @@ import jakarta.servlet.http.HttpServletRequest;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
 import java.util.*;
@@ -22,16 +23,22 @@ public class PermissionService {
     private TokenService tokenService;
     /**
      * 验证用户是否具备权限
-     * @param permission 权限字符串
+     * @param permissions 权限字符串
      * @return boolean
      */
-    public boolean hasPermi(String permission) {
-        // System.out.println(permission);
+//    public boolean hasPermi(String permissions) {
+    public boolean hasPermi(Collection<String> permissions) {
+
+        if (CollectionUtils.isEmpty(permissions)) return false;
+//        if (StringUtils.isEmpty(permission)) return false;
 
-        if (StringUtils.isEmpty(permission)) return false;
         // 获得当前用户的登录信息(包括权限)["xxx", "xxx"]
         Claims loginUserInfo = tokenService.getRedisTokenInfo();
 
+        // 如果是超级管理员,则直接通过
+        Boolean userIsSuper = (Integer) loginUserInfo.get("is_super") == 1;
+        if (userIsSuper) return true;
+
         // (/public/**) 接口 不要鉴权,否则会报错,会获取不到 loginUserInfo
         //  System.out.println("hasPermi - loginUserInfo:");
         //  System.out.println(loginUserInfo);
@@ -45,7 +52,17 @@ public class PermissionService {
                 for (String module : modulesList) {
                     modulesSet.add(module);
                 }
-                return hasPermissions(modulesSet, permission);
+
+                System.out.println("modulesSet:");
+                System.out.println(modulesSet);
+
+                for (String permission : permissions) {
+                    if (hasPermissions(modulesSet, permission)) {
+                        return true;
+                    }
+                }
+                //                return hasPermissions(modulesSet, permission);
+
             }
         }
         return false;
@@ -86,7 +103,7 @@ public class PermissionService {
      *    - 不匹配,抛出错误
      * permissionService.checkUserIdAndPermission(sysUserDTO.getUser_id(), "3.2.1");
      */
-    public void checkUserIdAndPermission(long user_id, String permission) {
+    public void checkUserIdAndPermission(long user_id, Collection<String> permission) {
         Claims loginUserInfo = tokenService.getRedisTokenInfo();
         Integer current_user_id = (Integer) loginUserInfo.get("user_id");
         if (current_user_id != user_id) {

+ 112 - 0
src/main/java/com/backendsys/config/Security/service/__PermissionService.java

@@ -0,0 +1,112 @@
+//package com.backendsys.config.Security.service;
+//
+//
+//import com.backendsys.exception.CustomException;
+//import com.backendsys.utils.response.ResultEnum;
+//import io.jsonwebtoken.Claims;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.stereotype.Service;
+//import org.springframework.util.StringUtils;
+//
+//import java.util.HashSet;
+//import java.util.List;
+//import java.util.Set;
+//
+///**
+// * 自定义权限 @PreAuthorize("@ss.hasPermi('3.2.3') && @ss.isSuper()")
+// */
+//@Service("ss")
+//public class __PermissionService {
+//    //private static final String ALL_PERMISSION = "*:*:*";
+//    @Autowired
+//    private TokenService tokenService;
+//    /**
+//     * 验证用户是否具备权限
+//     * @param permission 权限字符串
+//     * @return boolean
+//     */
+//    public boolean hasPermi(String permission) {
+//        // System.out.println(permission);
+//
+//        if (StringUtils.isEmpty(permission)) return false;
+//        // 获得当前用户的登录信息(包括权限)["xxx", "xxx"]
+//        Claims loginUserInfo = tokenService.getRedisTokenInfo();
+//
+//        // (/public/**) 接口 不要鉴权,否则会报错,会获取不到 loginUserInfo
+//        //  System.out.println("hasPermi - loginUserInfo:");
+//        //  System.out.println(loginUserInfo);
+//
+//        // 没有 modules 即不是系统用户,即没有访问后台的权限
+//        if (loginUserInfo != null) {
+//            Object modules = loginUserInfo.get("modules");
+//            if (modules != null) {
+//                List<String> modulesList = (List<String>) modules;
+//                Set<String> modulesSet = new HashSet<>();
+//                for (String module : modulesList) {
+//                    modulesSet.add(module);
+//                }
+//                return hasPermissions(modulesSet, permission);
+//            }
+//        }
+//        return false;
+//    }
+//    public boolean hasPermissions(Set<String> permissions, String permission) {
+//        return permissions.contains(StringUtils.trimAllWhitespace(permission));
+//    }
+//
+//    // 是否超级管理员
+//    public boolean isSuper() {
+//        Claims loginUserInfo = tokenService.getRedisTokenInfo();
+//        Boolean bool = (Integer) loginUserInfo.get("is_super") == 1;
+//        return bool;
+//    }
+//
+//    // 是否超级管理员 (首位)
+//    public boolean isFirstSuper() {
+//        Claims loginUserInfo = tokenService.getRedisTokenInfo();
+//        Boolean bool = (Integer) loginUserInfo.get("user_id") == 1;
+//        return bool;
+//    }
+//
+//    // 是否会员
+//    public boolean isMember() {
+//        Claims loginUserInfo = tokenService.getRedisTokenInfo();
+//        // System.out.println("(isMember) loginUserInfo:");
+//        // System.out.println(loginUserInfo);
+//        Boolean bool = "Member".equals(loginUserInfo.get("target"));
+//        return bool;
+//    }
+//
+//
+//    /**
+//     * 判断是否匹配当前 {用户ID} 与 {用户权限},不是则抛出错误
+//     * - 匹配,通过
+//     * - 不匹配,再次检查权限
+//     *    - 匹配,通过
+//     *    - 不匹配,抛出错误
+//     * permissionService.checkUserIdAndPermission(sysUserDTO.getUser_id(), "3.2.1");
+//     */
+//    public void checkUserIdAndPermission(long user_id, String permission) {
+//        Claims loginUserInfo = tokenService.getRedisTokenInfo();
+//        Integer current_user_id = (Integer) loginUserInfo.get("user_id");
+//        if (current_user_id != user_id) {
+//            if (!hasPermi(permission)) {
+//                throw new CustomException(ResultEnum.AUTH_ROLE_ERROR.getMessage(), ResultEnum.AUTH_ROLE_ERROR.getCode());
+//            }
+//        }
+//    }
+//
+//    /**
+//     * 判断是否 首位超级管理员 (id:1),不是则抛出错误
+//     */
+//    public void checkSuperAdminOfFirst(long user_id) {
+//        if (user_id == 1) {
+//            Claims loginUserInfo = tokenService.getRedisTokenInfo();
+//            Boolean bool = (Integer) loginUserInfo.get("user_id") == 1;
+//            if (!bool) {
+//                throw new CustomException(ResultEnum.AUTH_USER_ERROR.getMessage(), ResultEnum.AUTH_USER_ERROR.getCode());
+//            }
+//        }
+//    }
+//
+//}

+ 3 - 1
src/main/java/com/backendsys/controller/api/Systems/SysUserController.java

@@ -22,6 +22,7 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import java.security.NoSuchAlgorithmException;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 
@@ -78,12 +79,13 @@ public class SysUserController {
     @GetMapping("/api/system/user/getUserDetail")
     public Result getUserDetail(@Validated(SysUserDTO.Detail.class) SysUserDTO sysUserDTO) {
 
+        // [查询] 自身 UserId
         Long user_id = httpRequestAspect.getUserId();
 
         // 1.如果 user_id 为空,则查看自己
         if (sysUserDTO.getUser_id() == null) sysUserDTO.setUser_id(user_id);
         // 2.判断是否匹配当前 {用户ID} 与 {用户权限},不是则抛出错误
-        permissionService.checkUserIdAndPermission(sysUserDTO.getUser_id(), "3.2.1");
+        permissionService.checkUserIdAndPermission(sysUserDTO.getUser_id(), Arrays.asList("3.2.1"));
         // 3.判断是否 首位超级管理员 (id:1),不是则抛出错误
         permissionService.checkSuperAdminOfFirst(sysUserDTO.getUser_id());