From bbe0a2fd03063316e50cf141986bda984599bbda Mon Sep 17 00:00:00 2001
From: 935090232@qq.com <ak473600000>
Date: Tue, 22 Feb 2022 23:41:42 +0800
Subject: [PATCH] Merge branch 'developer'

---
 zq-erp/src/main/java/com/matrix/system/app/authority/AppAuthorityManager.java |   43 +++++++++++++++++--------------------------
 1 files changed, 17 insertions(+), 26 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 14b6089..fb84dee 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,10 +1,6 @@
 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;
@@ -15,6 +11,7 @@
 import com.matrix.system.common.bean.SysFunction;
 import com.matrix.system.common.bean.SysUsers;
 import com.matrix.system.common.constance.AppConstance;
+import com.matrix.system.common.init.LocalCache;
 import com.matrix.system.common.service.SysFunctionService;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -22,6 +19,7 @@
 
 import java.util.*;
 import java.util.Map.Entry;
+import java.util.stream.Collectors;
 
 /**
  * DefaultAuthorityManager 实现了权限控制接口
@@ -35,13 +33,11 @@
 
     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 USER_POWER_REDISKEY_APP = "USER_POWER_APP";
 
     public static final String USERFUNCTION = "userFunction";
     /** 用户所有路径权限的记录 **/
@@ -101,23 +97,14 @@
         List<String> userUrlMapping = new ArrayList<>();
 
 
-        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 redisKey = USER_POWER_REDISKEY_APP + SecureUtil.md5(user.getSuId()+"");
+        Map<String, Object> cachePowerMap = LocalCache.get(redisKey);
+        if (Objects.nonNull(cachePowerMap)) {
 
-            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));
-            }
+            userFunction = (Map<String, SysFunction>) cachePowerMap.get(USERFUNCTION);
+
+            userUrlMapping = (List<String>) cachePowerMap.get(USER_URL_MAPPING);
+
         } else {
             // 获取用户所有权限
             getUserFunction(user,userFunction, userUrlMapping);
@@ -125,11 +112,9 @@
             Map<String ,Object> powerMap=new HashMap<>();
             powerMap.put(USERFUNCTION, userFunction);
             powerMap.put(USER_URL_MAPPING, userUrlMapping);
-            redisClient.saveValue(redisKey,JSONUtil.parseObj(powerMap,true));
+            LocalCache.save(redisKey,powerMap);
         }
 
-
-        // TODO 这里的用户权限应该放到redis缓存中,在拦截器中做权限拦截
         WebUtil.setSessionAttribute(USERFUNCTION, userFunction);
         WebUtil.setSessionAttribute(USER_URL_MAPPING, userUrlMapping);
         result.putInMap(USERFUNCTION, userFunction);
@@ -163,11 +148,17 @@
             // 普通员工账号只拥有自己所拥有的权限
             List<SysFunction> userFunctionList = sysFunctionService.findFunctionByRoleIds(sysUser.getRoleIds());
             for (SysFunction sysFunction : userFunctionList) {
+
+                sysFunction.setSysFnBtnRel(
+                        sysFunction.getSysFnBtnRel().stream().filter(item->StringUtils.isContentSet(item.getBtnValue(),sysFunction.getRpfBns())).collect(Collectors.toList())
+                );
+
                 // TODO注册访问路径
                 registerUrlMapping(userUrlMapping, sysFunction,false);
                 if (userFunctionMap.containsKey(sysFunction.getFnCode())) {
                     // 如果功能已经被添加到集合中则追加权限按钮
                     SysFunction oneFunctionInMap = userFunctionMap.get(sysFunction.getFnCode());
+
                     // 为了方便判断所以用字符串记录一下
                     if (StringUtils.isBlank(oneFunctionInMap.getRpfBns())) {
                         oneFunctionInMap.setRpfBns(sysFunction.getRpfBns());

--
Gitblit v1.9.1