Browse Source

权限注解标识修改

785834757 1 year ago
parent
commit
b679c4a8da

+ 2 - 1
commons/src/main/java/com/jzg/commons/aop/PremissionCheck.java

@@ -8,5 +8,6 @@ import java.lang.annotation.Target;
 @Target({ElementType.METHOD, ElementType.TYPE})
 @Retention(RetentionPolicy.RUNTIME)
 public @interface PremissionCheck {
-    String value();
+    //权限标识  如果为空则标识只校验登录状态
+    String value() default "";
 }

+ 15 - 37
commons/src/main/java/com/jzg/commons/aop/aspect/PermissionAspect.java

@@ -20,6 +20,7 @@ import org.springframework.web.context.request.ServletRequestAttributes;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 @Aspect
 @Component
@@ -48,45 +49,22 @@ public class PermissionAspect {
         String token = request.getHeader("Authorization");
         String system = request.getHeader("System");
 
-        if(Objects.isNull(token)){
+        if(Objects.isNull(token) || Objects.isNull(redissonClient.getBucket(token).get())){
             throw new TokenExpireException("无权限访问");
         }
-        String userTokenDataStr = redissonClient.getBucket(token).get().toString();
-        if(Objects.isNull(userTokenDataStr))
-        {
-            throw new TokenExpireException();
-        }
-        //判断是否是admin用户 如果是的话则不进行权限过滤
-        if(JSON.parseObject(userTokenDataStr).getString("username").equals("admin")){
-            return;
-        }
-        JSONArray userSystemRole = JSON.parseObject(userTokenDataStr).getJSONArray("roles");
-        List<String> userSystemRoleIds = userSystemRole.stream().map(role ->
-            ((JSONObject) role).getString("roleId")).collect(Collectors.toList());
-
-        //取出缓存中的所有权限信息做对比
-        JSONArray jsonObject = JSON.parseArray(redissonClient.getBucket(RedisKeyConstants.ROLE_MENU_KEY).get().toString());
-
-        //取出系统的
-        JSONObject o = (JSONObject) jsonObject.stream()
-                .filter(item -> ((JSONObject) item).getString("systemCode").equals(system)).findFirst().orElse(null);
-
-        JSONArray collect = new JSONArray(o.getJSONArray("roleVos").stream()
-                .filter(x -> userSystemRoleIds.contains(((JSONObject) x).getString("id")))
-                .collect(Collectors.toList()));
-
-        //提取所有perms字段
-        List<String> permsList = collect.stream()
-                .flatMap(role -> {
-                    JSONArray menuVos = ((JSONObject) role).getJSONArray("menuVos");
-                    return menuVos.stream()
-                            .map(menu -> ((JSONObject) menu).getString("perms"));
-                })
-                .collect(Collectors.toList());
-
-        //判断是否用户是否存在权限标识
-        if(!permsList.contains(permission)){
-            throw new SystemException("无权限访问");
+        //如果权限标识为空 则不校验权限  只校验token
+        if(!permission.isEmpty()) {
+            String userTokenDataStr = redissonClient.getBucket(token).get().toString();
+            //判断是否是admin用户 如果是的话则不进行权限过滤
+            if (JSON.parseObject(userTokenDataStr).getString("username").equals("admin")) {
+                return;
+            }
+            JSONArray userSystemRole = JSON.parseObject(userTokenDataStr).getJSONArray("auths");
+            Stream<String> permsList = userSystemRole.stream().map(item -> ((JSONObject) item).getString("perms"));
+            //判断是否用户是否存在权限标识
+            if (!permsList.anyMatch(p -> p.equals(permission))) {
+                throw new TokenExpireException("无权限访问");
+            }
         }
     }
 }