From f7b2d885bc64a0598facb2b5a0d89dcdf5921902 Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期三, 27 九月 2023 16:26:11 +0800
Subject: [PATCH] 修改代理服务-3

---
 src/main/java/com/moon/server/mapper/all/PermsMapper.java   |   15 +++++++
 src/main/resources/mapper/all/PermsMapper.xml               |   25 ++++++++++++
 src/main/java/com/moon/server/service/sys/ProxyService.java |   33 +++++++++++++++-
 src/main/java/com/moon/server/entity/all/RedisCacheKey.java |    7 +++
 src/main/java/com/moon/server/service/all/PermsService.java |   35 ++++++++++++++++-
 src/main/java/com/moon/server/helper/HttpHelper.java        |    3 -
 6 files changed, 109 insertions(+), 9 deletions(-)

diff --git a/src/main/java/com/moon/server/entity/all/RedisCacheKey.java b/src/main/java/com/moon/server/entity/all/RedisCacheKey.java
index af80a99..a0384df 100644
--- a/src/main/java/com/moon/server/entity/all/RedisCacheKey.java
+++ b/src/main/java/com/moon/server/entity/all/RedisCacheKey.java
@@ -41,6 +41,13 @@
     }
 
     /**
+     * GeoServer鐨勫浘灞傚悕閿�
+     */
+    public static String permsGeoTabKey(String key) {
+        return "perms:geo:tab:" + key;
+    }
+
+    /**
      * 鍥惧眰鎺堟潈閿�
      */
     public static String permsLayerKey(String key) {
diff --git a/src/main/java/com/moon/server/helper/HttpHelper.java b/src/main/java/com/moon/server/helper/HttpHelper.java
index 6d621d0..19d8eff 100644
--- a/src/main/java/com/moon/server/helper/HttpHelper.java
+++ b/src/main/java/com/moon/server/helper/HttpHelper.java
@@ -69,7 +69,6 @@
 
         CloseableHttpClient client = null;
         HttpResponse proxyResponse = null;
-
         try {
             client = this.createHttpClient();
             proxyResponse = client.execute(host, proxyRequest);
@@ -287,7 +286,7 @@
     }
 
     private void copeGeoService(HttpResponse proxyResponse, HttpServletRequest request, HttpServletResponse response, ResEntity res) throws IOException {
-        if (StaticData.GET_CAPABILITIES.equals(request.getParameter(StaticData.REQUEST))) {
+        if (StaticData.GET_CAPABILITIES.equals(res.getBak())) {
             //
         }
 
diff --git a/src/main/java/com/moon/server/mapper/all/PermsMapper.java b/src/main/java/com/moon/server/mapper/all/PermsMapper.java
index cfeb1a1..d1d6117 100644
--- a/src/main/java/com/moon/server/mapper/all/PermsMapper.java
+++ b/src/main/java/com/moon/server/mapper/all/PermsMapper.java
@@ -32,6 +32,21 @@
     public List<ResEntity> selectAllRes();
 
     /**
+     * 鏍规嵁鐢ㄦ埛Uid鏌ヨGeoServer鐨勫浘灞傚悕
+     *
+     * @param uid
+     * @return
+     */
+    public List<String> selectTabs(String uid);
+
+    /**
+     * 鏌ヨ鎵�鏈塆eoServer鐨勫浘灞傚悕
+     *
+     * @return
+     */
+    public List<String> selectAllTabs();
+
+    /**
      * 鏍规嵁鐢ㄦ埛Uid鏌ヨ鑿滃崟鎺堟潈
      *
      * @param uid
diff --git a/src/main/java/com/moon/server/service/all/PermsService.java b/src/main/java/com/moon/server/service/all/PermsService.java
index 7601c86..c22b7ec 100644
--- a/src/main/java/com/moon/server/service/all/PermsService.java
+++ b/src/main/java/com/moon/server/service/all/PermsService.java
@@ -24,13 +24,22 @@
 
     @Override
     public List<ResEntity> selectRes(String uid) {
+        return selectResByUid(uid, false);
+    }
+
+    @Override
+    public List<ResEntity> selectAllRes() {
+        return selectResByUid(StaticData.ADMIN, true);
+    }
+
+    private List<ResEntity> selectResByUid(String uid, boolean isAll) {
         String key = RedisCacheKey.permsResKey(uid);
         Object obj = redisService.get(key);
         if (obj instanceof List<?>) {
             return (List<ResEntity>) obj;
         }
 
-        List<ResEntity> list = permsMapper.selectRes(uid);
+        List<ResEntity> list = isAll ? permsMapper.selectAllRes() : permsMapper.selectRes(uid);
         if (list != null && list.size() > 0) {
             redisService.put(key, list, SettingData.CACHE_EXPIRE, TimeUnit.MINUTES);
         }
@@ -39,8 +48,28 @@
     }
 
     @Override
-    public List<ResEntity> selectAllRes() {
-        return permsMapper.selectAllRes();
+    public List<String> selectTabs(String uid) {
+        return selectTabsByUid(uid, false);
+    }
+
+    @Override
+    public List<String> selectAllTabs() {
+        return selectTabsByUid(StaticData.ADMIN, true);
+    }
+
+    private List<String> selectTabsByUid(String uid, boolean isAll) {
+        String key = RedisCacheKey.permsGeoTabKey(uid);
+        Object obj = redisService.get(key);
+        if (obj instanceof List<?>) {
+            return (List<String>) obj;
+        }
+
+        List<String> list = isAll ? permsMapper.selectAllTabs() : permsMapper.selectTabs(uid);
+        if (list != null && list.size() > 0) {
+            redisService.put(key, list, SettingData.CACHE_EXPIRE, TimeUnit.MINUTES);
+        }
+
+        return list;
     }
 
     @Override
diff --git a/src/main/java/com/moon/server/service/sys/ProxyService.java b/src/main/java/com/moon/server/service/sys/ProxyService.java
index 4b14343..b6c8770 100644
--- a/src/main/java/com/moon/server/service/sys/ProxyService.java
+++ b/src/main/java/com/moon/server/service/sys/ProxyService.java
@@ -245,15 +245,42 @@
             return url;
         }
 
-        String str = req.getQueryString();
-        if (!StaticData.GET_CAPABILITIES.equals(req.getParameter(StaticData.REQUEST))) {
-            //
+        String str = req.getQueryString(), layers = req.getParameter("layers");
+        if (!StaticData.GET_CAPABILITIES.equals(req.getParameter(StaticData.REQUEST)) && null != layers) {
+            int start = str.indexOf("layers");
+            int end = str.indexOf("&", start);
+            layers = filterGeoLayers(ue, layers);
+
+            str = str.replace(str.substring(start, end > -1 ? end : str.length()), "layers=" + layers);
+        } else {
+            entity.setBak(StaticData.GET_CAPABILITIES);
         }
 
         return url + (url.contains("?") ? "&" : "?") + str;
     }
 
     /**
+     * 杩囨护GeoServer鍥惧眰
+     */
+    private String filterGeoLayers(UserEntity ue, String layers) {
+        List<String> tabs = StaticData.ADMIN.equals(ue.getUid()) ? permsService.selectAllTabs() : permsService.selectTabs(ue.getUid());
+        if (null == tabs || tabs.isEmpty()) {
+            return "";
+        }
+
+        StringBuilder sb = new StringBuilder();
+        String[] strs = layers.split(StaticData.COMMA);
+        for (String str : strs) {
+            if (tabs.contains(str)) {
+                sb.append(str).append(",");
+            }
+        }
+        sb.deleteCharAt(sb.length() - 1);
+
+        return sb.toString();
+    }
+
+    /**
      * 杞彂璇锋眰
      */
     private void forward(HttpServletRequest request, HttpServletResponse response, ResEntity entity, String url) throws Exception {
diff --git a/src/main/resources/mapper/all/PermsMapper.xml b/src/main/resources/mapper/all/PermsMapper.xml
index 6b1626d..bf43f36 100644
--- a/src/main/resources/mapper/all/PermsMapper.xml
+++ b/src/main/resources/mapper/all/PermsMapper.xml
@@ -18,12 +18,35 @@
     </select>
 
     <select id="selectAllRes" resultType="com.moon.server.entity.sys.ResEntity">
-        select distinct e.*
+        select e.*
         from lf.sys_res e
         where e.status between 1 and 2
         order by e.id;
     </select>
 
+    <select id="selectTabs" resultType="java.lang.String">
+        select distinct e.tab
+        from lf.sys_user a
+        inner join lf.sys_role_user b on a.id = b.userid
+        inner join lf.sys_role_layer c on b.roleid = c.roleid
+        inner join lf.sys_layer d on c.layerid = d.id
+        inner join lf.sys_res e on d.resid = e.id
+        <where>
+            d.status between 1 and 2 and e.status between 1 and 2 and e.category = 2 and length(e.tab) > 0
+            <if test="uid != null">
+                and a.uid = #{uid}
+            </if>
+        </where>
+        order by e.id;
+    </select>
+
+    <select id="selectAllTabs" resultType="java.lang.String">
+        select e.tab
+        from lf.sys_res e
+        where e.status between 1 and 2 and category = 2 and length(e.tab) > 0
+        order by e.id;
+    </select>
+
     <select id="selectMenus" resultType="com.moon.server.entity.all.MenusAuthEntity">
         select distinct e.id,e.pid,e.cn_name,e.en_name,e.url,e.perms,e.type,e.css,e.icon,e.level,e.order_num,e.is_show
         from lf.sys_user a

--
Gitblit v1.9.3