From 6f9a0cdb6360ff80818ce9ac947fb686e3045f8a Mon Sep 17 00:00:00 2001
From: jyy <935090232@qq.com>
Date: Wed, 07 Apr 2021 16:25:03 +0800
Subject: [PATCH] 登录权限加入redis

---
 zq-erp/src/main/java/com/matrix/system/app/authority/AppAuthorityManager.java |   38 ++++++++++++++++++++++++++++++++++++--
 1 files changed, 36 insertions(+), 2 deletions(-)

diff --git a/zq-erp/src/main/java/com/matrix/system/app/authority/AppAuthorityManager.java b/zq-erp/src/main/java/com/matrix/system/app/authority/AppAuthorityManager.java
index b34a8e5..14b6089 100644
--- a/zq-erp/src/main/java/com/matrix/system/app/authority/AppAuthorityManager.java
+++ b/zq-erp/src/main/java/com/matrix/system/app/authority/AppAuthorityManager.java
@@ -1,5 +1,10 @@
 package com.matrix.system.app.authority;
 
+import cn.hutool.crypto.SecureUtil;
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.matrix.component.redis.RedisClient;
 import com.matrix.core.constance.MatrixConstance;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.tools.StringUtils;
@@ -31,7 +36,12 @@
     private static final int DEFAULT_2 = 2;
 
     @Autowired
+    RedisClient redisClient;
+
+    @Autowired
     SysFunctionService sysFunctionService;
+
+    public static final String USER_POWER_REDISKEY = "USER_POWER_";
 
     public static final String USERFUNCTION = "userFunction";
     /** 用户所有路径权限的记录 **/
@@ -91,8 +101,32 @@
         List<String> userUrlMapping = new ArrayList<>();
 
 
-        // 获取用户所有权限
-        getUserFunction(user,userFunction, userUrlMapping);
+        String redisKey = USER_POWER_REDISKEY + SecureUtil.md5(user.getSuId()+"");
+        String cachedValue = redisClient.getCachedValue(redisKey);
+        if (StringUtils.isNotBlank(cachedValue)) {
+            //从缓存中获取用户权限
+            JSONObject powerMap = JSONUtil.parseObj(cachedValue);
+            String userFunctionMapStr = powerMap.get(USERFUNCTION).toString();
+            JSONObject userFunctionMap = JSONUtil.parseObj(userFunctionMapStr);
+            Set<String> userFunctionMapKeys = userFunctionMap.keySet();
+            userFunctionMapKeys.forEach(key -> {
+                userFunction.put(key, userFunctionMap.get(key, SysFunction.class));
+            });
+
+            String userUrlMappingListStr = powerMap.get(USER_URL_MAPPING).toString();
+            JSONArray userUrlMappingArray = JSONUtil.parseArray(userUrlMappingListStr);
+            for (int i = 0; i < userUrlMappingArray.size(); i++) {
+                userUrlMapping.add(userUrlMappingArray.get(i, String.class));
+            }
+        } else {
+            // 获取用户所有权限
+            getUserFunction(user,userFunction, userUrlMapping);
+
+            Map<String ,Object> powerMap=new HashMap<>();
+            powerMap.put(USERFUNCTION, userFunction);
+            powerMap.put(USER_URL_MAPPING, userUrlMapping);
+            redisClient.saveValue(redisKey,JSONUtil.parseObj(powerMap,true));
+        }
 
 
         // TODO 这里的用户权限应该放到redis缓存中,在拦截器中做权限拦截

--
Gitblit v1.9.1