Browse Source

新增用户权限判断工具类

tsurumure 10 months ago
parent
commit
27b6c75eec
51 changed files with 210 additions and 106 deletions
  1. 7 3
      README.md
  2. 0 1
      pom.xml
  3. 4 5
      src/main/java/com/backendsys/aspect/HttpRequestAspect.java
  4. 1 1
      src/main/java/com/backendsys/config/Interceptor/TranslationInterceptor.java
  5. 1 1
      src/main/java/com/backendsys/config/WebSocket/WebSocketConfig.java
  6. 2 2
      src/main/java/com/backendsys/controller/Systems/SysAuthController.java
  7. 2 2
      src/main/java/com/backendsys/controller/Systems/SysUserController.java
  8. 1 1
      src/main/java/com/backendsys/controller/Systems/SysUserPointController.java
  9. 1 1
      src/main/java/com/backendsys/controller/TestAuthController.java
  10. 1 1
      src/main/java/com/backendsys/entity/System/SysUserDTO.java
  11. 1 1
      src/main/java/com/backendsys/modules/common/config/redis/FastJsonRedisSerializer.java
  12. 1 3
      src/main/java/com/backendsys/modules/common/config/redis/RedisConfig.java
  13. 1 1
      src/main/java/com/backendsys/modules/common/config/redis/RedissonConfig.java
  14. 1 1
      src/main/java/com/backendsys/modules/common/config/redis/utils/RedisUtil.java
  15. 1 1
      src/main/java/com/backendsys/modules/common/config/security/ApplicationConfig.java
  16. 1 1
      src/main/java/com/backendsys/modules/common/config/security/CorsConfig.java
  17. 3 6
      src/main/java/com/backendsys/modules/common/config/security/SecurityConfig.java
  18. 1 1
      src/main/java/com/backendsys/modules/common/config/security/entity/SecurityUserInfo.java
  19. 1 1
      src/main/java/com/backendsys/modules/common/config/security/filter/CaptchaVerficationFilter.java
  20. 2 4
      src/main/java/com/backendsys/modules/common/config/security/filter/JwtAuthenticationFilter.java
  21. 1 1
      src/main/java/com/backendsys/modules/common/config/security/handler/CustomAuthenticationFailureHandler.java
  22. 1 1
      src/main/java/com/backendsys/modules/common/config/security/handler/CustomAuthenticationSuccessHandler.java
  23. 1 1
      src/main/java/com/backendsys/modules/common/config/security/handler/__CustomLogoutHandler.java
  24. 1 1
      src/main/java/com/backendsys/modules/common/config/security/service/impl/CustomUserDetailsServiceImpl.java
  25. 2 8
      src/main/java/com/backendsys/modules/common/config/security/utils/JwtUtil.java
  26. 2 2
      src/main/java/com/backendsys/modules/common/config/security/utils/PermissionUtil.java
  27. 21 9
      src/main/java/com/backendsys/modules/common/config/security/utils/SecurityUtil.java
  28. 1 2
      src/main/java/com/backendsys/modules/common/config/security/utils/TokenUtil.java
  29. 5 0
      src/main/java/com/backendsys/modules/common/enums/MatchType.java
  30. 23 0
      src/main/java/com/backendsys/modules/common/pom.md
  31. 8 7
      src/main/java/com/backendsys/modules/common/utils/Result.java
  32. 7 4
      src/main/java/com/backendsys/modules/system/controller/SysUserV2Controller.java
  33. 1 1
      src/main/java/com/backendsys/modules/system/dao/SysUserDao.java
  34. 1 1
      src/main/java/com/backendsys/modules/system/dao/SysUserInfoDao.java
  35. 13 0
      src/main/java/com/backendsys/modules/system/dao/SysUserRoleDao.java
  36. 2 2
      src/main/java/com/backendsys/modules/system/entity/SysUser/SysUser.java
  37. 17 4
      src/main/java/com/backendsys/modules/system/entity/SysUser/SysUserInfo.java
  38. 9 0
      src/main/java/com/backendsys/modules/system/entity/SysUser/SysUserRole.java
  39. 3 2
      src/main/java/com/backendsys/modules/system/service/SysUserV2Service.java
  40. 30 7
      src/main/java/com/backendsys/modules/system/service/impl/SysUserV2ServiceImpl.java
  41. 1 1
      src/main/java/com/backendsys/service/Ai/AiChatServiceImpl.java
  42. 1 1
      src/main/java/com/backendsys/service/Ai/Aizn/AiznModelServiceImpl.java
  43. 1 1
      src/main/java/com/backendsys/service/B2c/B2cMemberServiceImpl.java
  44. 1 1
      src/main/java/com/backendsys/service/SDKService/SDKTencent/SDKTencentSMSServiceImpl.java
  45. 4 4
      src/main/java/com/backendsys/service/System/SysAuthServiceImpl.java
  46. 1 1
      src/main/java/com/backendsys/service/System/SysMenuServiceImpl.java
  47. 1 1
      src/main/java/com/backendsys/utils/CommonUtil.java
  48. 1 1
      src/main/java/com/backendsys/utils/LanguageUtil.java
  49. 3 4
      src/main/resources/application.yml
  50. 0 0
      src/main/resources/mapper/system/SysUserDao.xml
  51. 14 0
      src/main/resources/mapper/system/SysUserRoleDao.xml

+ 7 - 3
README.md

@@ -22,7 +22,6 @@ mvn install:install-file -Dfile=configuration/.m2/repository/ziniao-sdk-java-5.1
 // 如果出现拒绝访问,则需要使用管理员权限执行命令
 ```
 
-
 首次部署需在 pom.xml 中去除 `copy-dependencies` 注释,启用分包功能 (将包分离到 `libs` 文件夹中),像这样:
 ```
 /home/www/project/BackendSys/libs
@@ -48,9 +47,14 @@ sh backendsys.sh start
 tail -f backendsys.log
 ```
 
+#### 工具类
+##### SecurityUtil
 
-
-
+|Method|Descript|
+|-|-|
+|SecurityUtil.getUserId()|获得当前登录用户ID|
+|SecurityUtil.hasPermission("3.2.1")|判断当前用户是否具备权限|
+|SecurityUtil.hasPermission("3.2.1")|判断当前用户是否具备权限|
 
 
 

+ 0 - 1
pom.xml

@@ -129,7 +129,6 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-redis</artifactId>
         </dependency>
-
         <dependency>
             <groupId>org.redisson</groupId>
             <artifactId>redisson</artifactId>

+ 4 - 5
src/main/java/com/backendsys/aspect/HttpRequestAspect.java

@@ -1,6 +1,7 @@
 package com.backendsys.aspect;
 
-import com.backendsys.config.Security.utils.TokenUtil;
+import cn.hutool.core.convert.Convert;
+import com.backendsys.modules.common.config.security.utils.TokenUtil;
 import io.jsonwebtoken.Claims;
 import jakarta.servlet.http.HttpServletRequest;
 import org.aspectj.lang.annotation.Aspect;
@@ -40,8 +41,7 @@ public class HttpRequestAspect {
         if (request != null) {
             Claims tokenInfo = tokenUtil.getTokenInfo(request);
             if (tokenInfo != null) {
-                Integer memberId = (Integer) tokenInfo.get("user_id");
-                return memberId.longValue();
+                return Convert.toLong(tokenInfo.get("user_id"));
             }
         }
         return null;
@@ -56,8 +56,7 @@ public class HttpRequestAspect {
         if (request != null) {
             Claims tokenInfo = tokenUtil.getTokenInfo(request);
             if (tokenInfo != null) {
-                Integer memberId = (Integer) tokenInfo.get("member_id");
-                return memberId.longValue();
+                return Convert.toLong(tokenInfo.get("member_id"));
             }
         }
         return null;

+ 1 - 1
src/main/java/com/backendsys/config/Interceptor/TranslationInterceptor.java

@@ -1,6 +1,6 @@
 // package com.backendsys.config.Interceptor;
 
-// import com.backendsys.config.Security.utils.TokenUtil;
+// import com.backendsys.modules.common.config.Security.utils.TokenUtil;
 // import jakarta.servlet.http.Cookie;
 // import jakarta.servlet.http.HttpServletRequest;
 // import jakarta.servlet.http.HttpServletResponse;

+ 1 - 1
src/main/java/com/backendsys/config/WebSocket/WebSocketConfig.java

@@ -1,7 +1,7 @@
 package com.backendsys.config.WebSocket;
 
 import cn.hutool.core.util.StrUtil;
-import com.backendsys.config.Security.utils.JwtUtil;
+import com.backendsys.modules.common.config.security.utils.JwtUtil;
 
 import io.jsonwebtoken.Claims;
 import lombok.RequiredArgsConstructor;

+ 2 - 2
src/main/java/com/backendsys/controller/Systems/SysAuthController.java

@@ -1,8 +1,8 @@
 package com.backendsys.controller.Systems;
 
 import com.backendsys.aspect.RateLimiting;
-import com.backendsys.config.Redis.utils.RedisUtil;
-import com.backendsys.config.Security.utils.TokenUtil;
+import com.backendsys.modules.common.config.redis.utils.RedisUtil;
+import com.backendsys.modules.common.config.security.utils.TokenUtil;
 import com.backendsys.entity.System.SysUserDTO;
 import com.backendsys.mapper.System.SysUserMapper;
 import com.backendsys.utils.response.Result;

+ 2 - 2
src/main/java/com/backendsys/controller/Systems/SysUserController.java

@@ -2,8 +2,8 @@ package com.backendsys.controller.Systems;
 
 import com.backendsys.aspect.HttpRequestAspect;
 import com.backendsys.aspect.QueryNullCheck;
-import com.backendsys.config.Security.utils.PermissionUtil;
-import com.backendsys.config.Security.utils.TokenUtil;
+import com.backendsys.modules.common.config.security.utils.PermissionUtil;
+import com.backendsys.modules.common.config.security.utils.TokenUtil;
 import com.backendsys.entity.PageDTO;
 import com.backendsys.entity.System.SysUserDTO;
 import com.backendsys.utils.response.Result;

+ 1 - 1
src/main/java/com/backendsys/controller/Systems/SysUserPointController.java

@@ -1,7 +1,7 @@
 package com.backendsys.controller.Systems;
 
 import com.backendsys.aspect.HttpRequestAspect;
-import com.backendsys.config.Security.utils.PermissionUtil;
+import com.backendsys.modules.common.config.security.utils.PermissionUtil;
 import com.backendsys.entity.PageDTO;
 import com.backendsys.entity.System.SysUserPointsDTO;
 import com.backendsys.enums.UserPointActivityType;

+ 1 - 1
src/main/java/com/backendsys/controller/TestAuthController.java

@@ -1,6 +1,6 @@
 package com.backendsys.controller;
 
-import com.backendsys.config.Security.utils.TokenUtil;
+import com.backendsys.modules.common.config.security.utils.TokenUtil;
 import io.jsonwebtoken.Claims;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;

+ 1 - 1
src/main/java/com/backendsys/entity/System/SysUserDTO.java

@@ -43,7 +43,7 @@ public class SysUserDTO {
   /**
    * sys_user_info
    */
-  @NotNull(message="user_id 不能为空", groups = { Update.class, Audit.class, ResetPassword.class })
+  @NotNull(message="user_id 不能为空", groups = { Update.class, Detail.class, Audit.class, ResetPassword.class })
   //@Min(value = 1, message = "user_id 必须大于等于 0", groups = {Update.class, Delete.class})
   private Long user_id;
   private List<Long> user_ids;

+ 1 - 1
src/main/java/com/backendsys/config/Redis/FastJsonRedisSerializer.java → src/main/java/com/backendsys/modules/common/config/redis/FastJsonRedisSerializer.java

@@ -1,4 +1,4 @@
-package com.backendsys.config.Redis;
+package com.backendsys.modules.common.config.redis;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.parser.ParserConfig;

+ 1 - 3
src/main/java/com/backendsys/config/Redis/RedisConfig.java → src/main/java/com/backendsys/modules/common/config/redis/RedisConfig.java

@@ -1,10 +1,8 @@
-package com.backendsys.config.Redis;
+package com.backendsys.modules.common.config.redis;
 
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Conditional;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.data.redis.connection.RedisConnectionFactory;
-import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.serializer.StringRedisSerializer;
 

+ 1 - 1
src/main/java/com/backendsys/config/Redis/RedissonConfig.java → src/main/java/com/backendsys/modules/common/config/redis/RedissonConfig.java

@@ -1,4 +1,4 @@
-package com.backendsys.config.Redis;
+package com.backendsys.modules.common.config.redis;
 
 import org.redisson.Redisson;
 import org.redisson.api.RedissonClient;

+ 1 - 1
src/main/java/com/backendsys/config/Redis/utils/RedisUtil.java → src/main/java/com/backendsys/modules/common/config/redis/utils/RedisUtil.java

@@ -1,4 +1,4 @@
-package com.backendsys.config.Redis.utils;
+package com.backendsys.modules.common.config.redis.utils;
 
 import lombok.RequiredArgsConstructor;
 import org.springframework.data.redis.core.BoundSetOperations;

+ 1 - 1
src/main/java/com/backendsys/config/Security/ApplicationConfig.java → src/main/java/com/backendsys/modules/common/config/security/ApplicationConfig.java

@@ -1,4 +1,4 @@
-package com.backendsys.config.Security;
+package com.backendsys.modules.common.config.security;
 
 import com.backendsys.mapper.System.SysUserMapper;
 import lombok.RequiredArgsConstructor;

+ 1 - 1
src/main/java/com/backendsys/config/Security/CorsConfig.java → src/main/java/com/backendsys/modules/common/config/security/CorsConfig.java

@@ -1,4 +1,4 @@
-package com.backendsys.config.Security;
+package com.backendsys.modules.common.config.security;
 
 import com.backendsys.config.Interceptor.PreAuthorizeInterceptor;
 import org.springframework.beans.factory.annotation.Autowired;

+ 3 - 6
src/main/java/com/backendsys/config/Security/SecurityConfig.java → src/main/java/com/backendsys/modules/common/config/security/SecurityConfig.java

@@ -1,13 +1,12 @@
-package com.backendsys.config.Security;
+package com.backendsys.modules.common.config.security;
 
 import cn.hutool.core.util.ArrayUtil;
-import com.backendsys.config.Security.filter.CaptchaVerficationFilter;
-import com.backendsys.config.Security.filter.JwtAuthenticationFilter;
+import com.backendsys.modules.common.config.security.filter.CaptchaVerficationFilter;
+import com.backendsys.modules.common.config.security.filter.JwtAuthenticationFilter;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
 import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
 import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
@@ -18,8 +17,6 @@ import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.security.web.SecurityFilterChain;
 import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
 
-import java.util.Arrays;
-
 @Configuration
 @EnableWebSecurity // 开启网络安全注解
 @RequiredArgsConstructor

+ 1 - 1
src/main/java/com/backendsys/config/Security/entity/SecurityUserInfo.java → src/main/java/com/backendsys/modules/common/config/security/entity/SecurityUserInfo.java

@@ -1,4 +1,4 @@
-package com.backendsys.config.Security.entity;
+package com.backendsys.modules.common.config.security.entity;
 
 import lombok.Data;
 

+ 1 - 1
src/main/java/com/backendsys/config/Security/filter/CaptchaVerficationFilter.java → src/main/java/com/backendsys/modules/common/config/security/filter/CaptchaVerficationFilter.java

@@ -1,4 +1,4 @@
-package com.backendsys.config.Security.filter;
+package com.backendsys.modules.common.config.security.filter;
 
 import jakarta.servlet.FilterChain;
 import jakarta.servlet.ServletException;

+ 2 - 4
src/main/java/com/backendsys/config/Security/filter/JwtAuthenticationFilter.java → src/main/java/com/backendsys/modules/common/config/security/filter/JwtAuthenticationFilter.java

@@ -1,11 +1,10 @@
-package com.backendsys.config.Security.filter;
+package com.backendsys.modules.common.config.security.filter;
 
 import cn.hutool.core.util.ArrayUtil;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.backendsys.utils.response.Result;
 import com.backendsys.utils.response.ResultEnum;
-import com.backendsys.config.Security.utils.JwtUtil;
-import io.jsonwebtoken.Claims;
+import com.backendsys.modules.common.config.security.utils.JwtUtil;
 import io.jsonwebtoken.ExpiredJwtException;
 import io.jsonwebtoken.MalformedJwtException;
 import io.jsonwebtoken.security.SignatureException;
@@ -21,7 +20,6 @@ import org.springframework.security.authentication.UsernamePasswordAuthenticatio
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.security.core.userdetails.UserDetailsService;
-import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
 import org.springframework.stereotype.Component;
 import org.springframework.web.filter.OncePerRequestFilter;
 

+ 1 - 1
src/main/java/com/backendsys/config/Security/handler/CustomAuthenticationFailureHandler.java → src/main/java/com/backendsys/modules/common/config/security/handler/CustomAuthenticationFailureHandler.java

@@ -1,4 +1,4 @@
-package com.backendsys.config.Security.handler;
+package com.backendsys.modules.common.config.security.handler;
 
 import jakarta.servlet.ServletException;
 import jakarta.servlet.http.HttpServletRequest;

+ 1 - 1
src/main/java/com/backendsys/config/Security/handler/CustomAuthenticationSuccessHandler.java → src/main/java/com/backendsys/modules/common/config/security/handler/CustomAuthenticationSuccessHandler.java

@@ -1,4 +1,4 @@
-package com.backendsys.config.Security.handler;
+package com.backendsys.modules.common.config.security.handler;
 
 import jakarta.servlet.ServletException;
 import jakarta.servlet.http.HttpServletRequest;

+ 1 - 1
src/main/java/com/backendsys/config/Security/handler/__CustomLogoutHandler.java → src/main/java/com/backendsys/modules/common/config/security/handler/__CustomLogoutHandler.java

@@ -1,4 +1,4 @@
-//package com.backendsys.config.Security.handler;
+//package com.backendsys.modules.common.config.Security.handler;
 //
 //import jakarta.servlet.http.HttpServletRequest;
 //import jakarta.servlet.http.HttpServletResponse;

+ 1 - 1
src/main/java/com/backendsys/config/Security/impl/CustomUserDetailsServiceImpl.java → src/main/java/com/backendsys/modules/common/config/security/service/impl/CustomUserDetailsServiceImpl.java

@@ -1,4 +1,4 @@
-//package com.backendsys.config.Security;
+//package com.backendsys.modules.common.config.Security;
 //
 //import org.springframework.beans.factory.aspect.Autowired;
 //import org.springframework.security.core.authority.AuthorityUtils;

+ 2 - 8
src/main/java/com/backendsys/config/Security/utils/JwtUtil.java → src/main/java/com/backendsys/modules/common/config/security/utils/JwtUtil.java

@@ -1,22 +1,16 @@
-package com.backendsys.config.Security.utils;
+package com.backendsys.modules.common.config.security.utils;
 
-import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.json.JSONUtil;
-import com.backendsys.config.Security.entity.SecurityUserInfo;
+import com.backendsys.modules.common.config.security.entity.SecurityUserInfo;
 import io.jsonwebtoken.Claims;
 import io.jsonwebtoken.Jwts;
-import io.jsonwebtoken.SignatureAlgorithm;
-import io.jsonwebtoken.io.Decoders;
-import io.jsonwebtoken.security.Keys;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.stereotype.Service;
 
 import javax.crypto.SecretKey;
 import javax.crypto.spec.SecretKeySpec;
 import java.nio.charset.StandardCharsets;
-import java.security.Key;
 import java.util.Base64;
 import java.util.Date;
 import java.util.Map;

+ 2 - 2
src/main/java/com/backendsys/config/Security/utils/PermissionUtil.java → src/main/java/com/backendsys/modules/common/config/security/utils/PermissionUtil.java

@@ -1,6 +1,6 @@
-package com.backendsys.config.Security.utils;
+package com.backendsys.modules.common.config.security.utils;
 
-import com.backendsys.config.Security.entity.SecurityUserInfo;
+import com.backendsys.modules.common.config.security.entity.SecurityUserInfo;
 import com.backendsys.exception.CustomException;
 import com.backendsys.utils.response.ResultEnum;
 import org.springframework.beans.factory.annotation.Autowired;

+ 21 - 9
src/main/java/com/backendsys/config/Security/utils/SecurityUtil.java → src/main/java/com/backendsys/modules/common/config/security/utils/SecurityUtil.java

@@ -1,14 +1,12 @@
-package com.backendsys.config.Security.utils;
+package com.backendsys.modules.common.config.security.utils;
 
 import cn.hutool.core.convert.Convert;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
-import com.backendsys.config.Security.entity.SecurityUserInfo;
+import com.backendsys.modules.common.config.security.entity.SecurityUserInfo;
+import com.backendsys.modules.common.enums.MatchType;
 import io.jsonwebtoken.Claims;
 import io.jsonwebtoken.Jwts;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContextHolder;
 
@@ -17,7 +15,6 @@ import javax.crypto.spec.SecretKeySpec;
 import java.nio.charset.StandardCharsets;
 import java.util.Base64;
 import java.util.List;
-import java.util.Map;
 
 public class SecurityUtil {
 
@@ -60,18 +57,33 @@ public class SecurityUtil {
 
 
     /**
-     * 判断是否具备权限,或者是超级管理员
+     * 判断是否具备权限 (单个)
      */
     public static Boolean hasPermission(String permission) {
         SecurityUserInfo userInfo = getUserInfo();
         List<String> modules = userInfo.getModules();
         return modules.contains(permission);
     }
-    public static Boolean hasPermissions(List<String> permissions) {
+    /**
+     * 判断是否具备用户权限 (多个) (默认 AND)
+     * - SecurityUtil.hasPermissions(Arrays.asList("3.2.1", "3.2.2"))
+     * - SecurityUtil.hasPermissions(Arrays.asList("3.2.1", "3.2.2"), MatchType.OR)
+     */
+    public static Boolean hasPermissions(List<String> permissions, MatchType matchType) {
         SecurityUserInfo userInfo = getUserInfo();
         List<String> modules = userInfo.getModules();
-        return permissions.stream().allMatch(modules::contains);
+        if (matchType.equals(MatchType.AND)) {
+            return permissions.stream().allMatch(modules::contains);
+        } else if (matchType.equals(MatchType.OR)) {
+            return permissions.stream().anyMatch(modules::contains);
+        }
+        return false;
     }
+    public static Boolean hasPermissions(List<String> permissions) {
+        return hasPermissions(permissions, MatchType.AND);
+    }
+
+
     /**
      * 判断是否超级管理员
      */

+ 1 - 2
src/main/java/com/backendsys/config/Security/utils/TokenUtil.java → src/main/java/com/backendsys/modules/common/config/security/utils/TokenUtil.java

@@ -1,7 +1,6 @@
-package com.backendsys.config.Security.utils;
+package com.backendsys.modules.common.config.security.utils;
 
 import cn.hutool.core.convert.Convert;
-import com.backendsys.config.Security.utils.JwtUtil;
 import io.jsonwebtoken.Claims;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;

+ 5 - 0
src/main/java/com/backendsys/modules/common/enums/MatchType.java

@@ -0,0 +1,5 @@
+package com.backendsys.modules.common.enums;
+
+public enum MatchType {
+    AND, OR
+}

+ 23 - 0
src/main/java/com/backendsys/modules/common/pom.md

@@ -0,0 +1,23 @@
+<!-- Security -->
+<dependency>
+    <groupId>org.springframework.security</groupId>
+    <artifactId>spring-security-oauth2-authorization-server</artifactId>
+    <version>1.1.1</version>
+</dependency>
+
+<!-- Redis -->
+<dependency>
+    <groupId>org.springframework.boot</groupId>
+    <artifactId>spring-boot-starter-data-redis</artifactId>
+</dependency>
+<dependency>
+    <groupId>org.redisson</groupId>
+    <artifactId>redisson</artifactId>
+    <version>3.23.2</version>
+    <exclusions>
+        <exclusion>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-simple</artifactId>
+        </exclusion>
+    </exclusions>
+</dependency>

+ 8 - 7
src/main/java/com/backendsys/modules/common/utils/Result.java

@@ -3,22 +3,23 @@ package com.backendsys.modules.common.utils;
 import org.apache.http.HttpStatus;
 
 import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.Map;
 
 /**
  * 返回数据
  *
  */
-public class Result extends HashMap<String, Object> {
+public class Result extends LinkedHashMap<String, Object> {
 	private static final long serialVersionUID = 1L;
 	
 	public Result() {
-		put("code", 0);
-		put("msg", "success");
+		put("code", 200);
+		put("message", "success");
 	}
 	
 	public static Result error() {
-		return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常");
+		return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "系统异常");
 	}
 	
 	public static Result error(String msg) {
@@ -28,21 +29,21 @@ public class Result extends HashMap<String, Object> {
 	public static Result error(int code, String msg) {
 		Result r = new Result();
 		r.put("code", code);
-		r.put("msg", msg);
+		r.put("message", msg);
 		return r;
 	}
 
 	public static Result error(int code, String msg, Object obj) {
 		Result r = new Result();
 		r.put("code", code);
-		r.put("msg", msg);
+		r.put("message", msg);
 		r.put("data", obj);
 		return r;
 	}
 
 	public static Result success(String msg) {
 		Result r = new Result();
-		r.put("msg", msg);
+		r.put("message", msg);
 		return r;
 	}
 	

+ 7 - 4
src/main/java/com/backendsys/modules/system/controller/SysUserV2Controller.java

@@ -1,7 +1,7 @@
 package com.backendsys.modules.system.controller;
 
-import com.backendsys.config.Security.utils.SecurityUtil;
-import com.backendsys.config.Security.utils.TokenUtil;
+import com.backendsys.modules.common.config.security.utils.SecurityUtil;
+import com.backendsys.modules.common.enums.MatchType;
 import com.backendsys.modules.common.utils.Result;
 import com.backendsys.modules.system.service.SysUserV2Service;
 import io.swagger.v3.oas.annotations.Operation;
@@ -11,6 +11,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Arrays;
+
 @RestController
 @Tag(name = "系统用户")
 public class SysUserV2Controller {
@@ -23,13 +25,14 @@ public class SysUserV2Controller {
     public Result getUserDetail(@Parameter(description = "用户ID") Long user_id) {
 
 //        System.out.println(tokenUtil.getUserId());
-//        System.out.println(SecurityUtil.getPrincipal());
 //        System.out.println(SecurityUtil.getUserInfo());
 //        System.out.println(SecurityUtil.getToken());
         System.out.println("UserId: " + SecurityUtil.getUserId());
 
         // 判断是否具备权限,或者是超级管理员 (重构)
-        System.out.println("hasPermission(\"3.2.1\"): " + SecurityUtil.hasPermission("3.2.1"));
+        System.out.println("hasPermission: " + SecurityUtil.hasPermission("3.2.1"));
+        System.out.println("hasPermissions (AND): " + SecurityUtil.hasPermissions(Arrays.asList("3.2.1", "3.2.2")));
+        System.out.println("hasPermissions (OR): " + SecurityUtil.hasPermissions(Arrays.asList("3.2.1", "3.2.2"), MatchType.OR));
         System.out.println("isSuper: " + SecurityUtil.isSuper());
 
         return Result.success().put("data", sysUserV2Service.selectUserInfo(user_id));

+ 1 - 1
src/main/java/com/backendsys/modules/system/dao/SysUserDao.java

@@ -1,6 +1,6 @@
 package com.backendsys.modules.system.dao;
 
-import com.backendsys.modules.system.entity.SysUser;
+import com.backendsys.modules.system.entity.SysUser.SysUser;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 

+ 1 - 1
src/main/java/com/backendsys/modules/system/dao/SysUserInfoDao.java

@@ -1,6 +1,6 @@
 package com.backendsys.modules.system.dao;
 
-import com.backendsys.modules.system.entity.SysUserInfo;
+import com.backendsys.modules.system.entity.SysUser.SysUserInfo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 

+ 13 - 0
src/main/java/com/backendsys/modules/system/dao/SysUserRoleDao.java

@@ -0,0 +1,13 @@
+package com.backendsys.modules.system.dao;
+
+import com.backendsys.modules.system.entity.SysUser.SysUserRole;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface SysUserRoleDao {
+    // 获得用户角色
+    List<SysUserRole> selectRoleByUserId(Long user_id);
+}

+ 2 - 2
src/main/java/com/backendsys/modules/system/entity/SysUser.java → src/main/java/com/backendsys/modules/system/entity/SysUser/SysUser.java

@@ -1,4 +1,4 @@
-package com.backendsys.modules.system.entity;
+package com.backendsys.modules.system.entity.SysUser;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -12,6 +12,6 @@ public class SysUser {
     private Long id;
     private String username;
     private String phone;
-    private Integer phone_area_code;
+    private String phone_area_code;
     private String password;
 }

+ 17 - 4
src/main/java/com/backendsys/modules/system/entity/SysUserInfo.java → src/main/java/com/backendsys/modules/system/entity/SysUser/SysUserInfo.java

@@ -1,4 +1,4 @@
-package com.backendsys.modules.system.entity;
+package com.backendsys.modules.system.entity.SysUser;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
@@ -6,26 +6,39 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 @TableName("sys_user_info")
 public class SysUserInfo {
     @TableId(type = IdType.AUTO)
     private Long id;
     private Long user_id;
+
+    @TableField(exist = false)
+    private String username;
+    @TableField(exist = false)
+    private String phone;
+    @TableField(exist = false)
+    private String phone_area_code;
+
     private String nickname;
     private String email;
     private Integer gender;
     private String avatar;
-    private String last_login_uuid;
     private String last_login_ip;
+    private String last_login_uuid;
     private String last_login_time;
     private Integer is_super;
+    private Double point_balance;
+    private Integer status;
     private Integer audit_status;
     private String audit_note;
-    private Float point_balance;
-    private Integer status;
     private String create_time;
     private String update_time;
     private Integer del_flag;
 
+    @TableField(exist = false)
+    private List<SysUserRole> roles;
+
 }

+ 9 - 0
src/main/java/com/backendsys/modules/system/entity/SysUser/SysUserRole.java

@@ -0,0 +1,9 @@
+package com.backendsys.modules.system.entity.SysUser;
+
+import lombok.Data;
+
+@Data
+public class SysUserRole {
+    private Long role_id;
+    private String role_name;
+}

+ 3 - 2
src/main/java/com/backendsys/modules/system/service/SysUserV2Service.java

@@ -1,11 +1,12 @@
 package com.backendsys.modules.system.service;
 
-import com.backendsys.modules.system.entity.SysUser;
-import com.backendsys.modules.system.entity.SysUserInfo;
+import com.backendsys.modules.system.entity.SysUser.SysUser;
+import com.backendsys.modules.system.entity.SysUser.SysUserInfo;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 public interface SysUserV2Service extends IService<SysUser> {
 
+    // 获得系统用户详情
     public SysUserInfo selectUserInfo(Long user_id);
 
 }

+ 30 - 7
src/main/java/com/backendsys/modules/system/service/impl/SysUserV2ServiceImpl.java

@@ -2,15 +2,20 @@ package com.backendsys.modules.system.service.impl;
 
 import com.backendsys.modules.system.dao.SysUserDao;
 import com.backendsys.modules.system.dao.SysUserInfoDao;
-import com.backendsys.modules.system.entity.SysUser;
-import com.backendsys.modules.system.entity.SysUserInfo;
+import com.backendsys.modules.system.dao.SysUserRoleDao;
+import com.backendsys.modules.system.entity.SysUser.SysUser;
+import com.backendsys.modules.system.entity.SysUser.SysUserInfo;
+import com.backendsys.modules.system.entity.SysUser.SysUserRole;
 import com.backendsys.modules.system.service.SysUserV2Service;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+import java.util.Objects;
+
 @Service
 public class SysUserV2ServiceImpl extends ServiceImpl<SysUserDao, SysUser> implements SysUserV2Service {
 
@@ -18,13 +23,31 @@ public class SysUserV2ServiceImpl extends ServiceImpl<SysUserDao, SysUser> imple
     private SysUserDao sysUserDao;
     @Autowired
     private SysUserInfoDao sysUserInfoDao;
+    @Autowired
+    private SysUserRoleDao sysUserRoleDao;
 
+    /**
+     * 获得系统用户详情
+     */
     @Override
     public SysUserInfo selectUserInfo(Long user_id) {
-        return sysUserInfoDao.selectOne(new LambdaQueryWrapper<SysUserInfo>().eq(SysUserInfo::getUser_id, user_id));
-//        QueryWrapper<SysUserInfo> queryWrapper = new QueryWrapper<>();
-//        queryWrapper.eq("user_id", user_id);
-//        return sysUserInfoDao.selectOne(queryWrapper);
+
+        // 获得 用户账号信息
+        SysUser sysUser = sysUserDao.selectOne(new QueryWrapper<SysUser>().eq("id", user_id));
+        Objects.requireNonNull(sysUser, "用户不存在");
+
+        // 获得 用户基本信息
+        SysUserInfo sysUserInfo = sysUserInfoDao.selectOne(new QueryWrapper<SysUserInfo>().eq("user_id", user_id));
+        Objects.requireNonNull(sysUserInfo, "用户不存在");
+
+        // 账号信息 赋值到 基本信息
+        BeanUtils.copyProperties(sysUser, sysUserInfo);
+
+        // 获得 用户角色(绑定关系)
+        List<SysUserRole> sysUserRoleList = sysUserRoleDao.selectRoleByUserId(user_id);
+        sysUserInfo.setRoles(sysUserRoleList);
+
+        return sysUserInfo;
     }
 
 }

+ 1 - 1
src/main/java/com/backendsys/service/Ai/AiChatServiceImpl.java

@@ -6,7 +6,7 @@ import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.backendsys.aspect.HttpRequestAspect;
-import com.backendsys.config.Security.utils.TokenUtil;
+import com.backendsys.modules.common.config.security.utils.TokenUtil;
 import com.backendsys.entity.Ai.AiChatDTO;
 import com.backendsys.mapper.Ai.AiChatHistoryMapper;
 import com.backendsys.mapper.Ai.AiChatMapper;

+ 1 - 1
src/main/java/com/backendsys/service/Ai/Aizn/AiznModelServiceImpl.java

@@ -4,7 +4,7 @@ import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.backendsys.aspect.HttpRequestAspect;
-import com.backendsys.config.Redis.utils.RedisUtil;
+import com.backendsys.modules.common.config.redis.utils.RedisUtil;
 import com.backendsys.entity.Ai.Aizn.AiznImageStyleDTO;
 import com.backendsys.entity.Ai.Aizn.AiznIntelligentClipTaskDTO;
 import com.backendsys.entity.Ai.Aizn.AiznImageTaskVO;

+ 1 - 1
src/main/java/com/backendsys/service/B2c/B2cMemberServiceImpl.java

@@ -2,7 +2,7 @@ package com.backendsys.service.B2c;
 
 import com.backendsys.entity.B2c.B2cMemberDTO;
 import com.backendsys.mapper.B2c.B2cMemberMapper;
-import com.backendsys.config.Security.utils.JwtUtil;
+import com.backendsys.modules.common.config.security.utils.JwtUtil;
 import com.backendsys.utils.response.PageInfoResult;
 import com.backendsys.utils.response.Result;
 import com.backendsys.utils.response.ResultEnum;

+ 1 - 1
src/main/java/com/backendsys/service/SDKService/SDKTencent/SDKTencentSMSServiceImpl.java

@@ -5,7 +5,7 @@ import cn.hutool.core.util.RandomUtil;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
-import com.backendsys.config.Redis.utils.RedisUtil;
+import com.backendsys.modules.common.config.redis.utils.RedisUtil;
 import com.backendsys.entity.System.SysSMSDTO;
 import com.backendsys.exception.CustomException;
 import com.backendsys.mapper.System.SysMobileSMSHistoryMapper;

+ 4 - 4
src/main/java/com/backendsys/service/System/SysAuthServiceImpl.java

@@ -2,9 +2,9 @@ package com.backendsys.service.System;
 
 import cn.hutool.json.JSONUtil;
 import com.backendsys.config.Kaptcha.KaptchaUtil;
-import com.backendsys.config.Redis.utils.RedisUtil;
-import com.backendsys.config.Security.entity.SecurityUserInfo;
-import com.backendsys.config.Security.utils.TokenUtil;
+import com.backendsys.modules.common.config.redis.utils.RedisUtil;
+import com.backendsys.modules.common.config.security.entity.SecurityUserInfo;
+import com.backendsys.modules.common.config.security.utils.TokenUtil;
 import com.backendsys.modules.system.dao.SysUserInfoDao;
 import com.backendsys.entity.System.SysUserDTO;
 import com.backendsys.exception.CustomException;
@@ -13,7 +13,7 @@ import com.backendsys.utils.CountUtil;
 import com.backendsys.utils.UserUtils;
 import com.backendsys.utils.response.ResultEnum;
 import com.backendsys.mapper.System.SysUserMapper;
-import com.backendsys.config.Security.utils.JwtUtil;
+import com.backendsys.modules.common.config.security.utils.JwtUtil;
 import com.google.code.kaptcha.Producer;
 import jakarta.servlet.ServletOutputStream;
 import jakarta.servlet.http.HttpServletRequest;

+ 1 - 1
src/main/java/com/backendsys/service/System/SysMenuServiceImpl.java

@@ -1,6 +1,6 @@
 package com.backendsys.service.System;
 
-import com.backendsys.config.Redis.utils.RedisUtil;
+import com.backendsys.modules.common.config.redis.utils.RedisUtil;
 import com.backendsys.entity.System.SysMenuDTO;
 import com.backendsys.mapper.System.SysMenuMapper;
 import com.fasterxml.jackson.core.JsonProcessingException;

+ 1 - 1
src/main/java/com/backendsys/utils/CommonUtil.java

@@ -22,7 +22,7 @@ public class CommonUtil {
     //private static TokenUtil tokenService;
 
     // 以上引用会报错:
-    // Cannot invoke \"com.backendsys.config.Security.utils.TokenUtil.getTokenInfo(jakarta.servlet.http.HttpServletRequest)\" because \"com.backendsys.utils.CommonUtil.tokenService\" is null
+    // Cannot invoke \"com.backendsys.modules.common.config.Security.utils.TokenUtil.getTokenInfo(jakarta.servlet.http.HttpServletRequest)\" because \"com.backendsys.utils.CommonUtil.tokenService\" is null
     // 工具类无法直接用,得写 set 方法,如下:
 
     //private static TokenUtil tokenService;

+ 1 - 1
src/main/java/com/backendsys/utils/LanguageUtil.java

@@ -1,6 +1,6 @@
 package com.backendsys.utils;
 
-import com.backendsys.config.Security.utils.TokenUtil;
+import com.backendsys.modules.common.config.security.utils.TokenUtil;
 
 import java.util.ArrayList;
 import java.util.HashMap;

+ 3 - 4
src/main/resources/application.yml

@@ -34,14 +34,13 @@ spring:
 mybatis-plus:
   configuration:
     map-underscore-to-camel-case: false
+    # 开启控制台打印sql语句
+    # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
   global-config:
     banner: off
   mapper-locations:
     - classpath:com/backendsys/mapper/*.xml
-    - classpath:mapper/*.xml
-  # 开启控制台打印sql语句
-#  configuration:
-#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+    - classpath:mapper/**/*.xml
 
 # JVM
 server:

+ 0 - 0
src/main/resources/mapper/SysUserDao.xml → src/main/resources/mapper/system/SysUserDao.xml


+ 14 - 0
src/main/resources/mapper/system/SysUserRoleDao.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.backendsys.modules.system.dao.SysUserRoleDao">
+
+    <select id="selectRoleByUserId" resultType="com.backendsys.modules.system.entity.SysUser.SysUserRole">
+        SELECT
+            surr.role_id role_id,
+            sur.role_name role_name
+        FROM sys_user_role_relation surr
+        LEFT JOIN sys_user_role sur ON sur.id = surr.role_id
+        WHERE user_id = #{user_id}
+    </select>
+
+</mapper>