Browse Source

预加载权限

rengb 3 years ago
parent
commit
c8d080b305

+ 23 - 0
dblayer-mbg/src/main/java/com/lantone/dblayermbg/facade/ResourceFacade.java

@@ -1,8 +1,16 @@
 package com.lantone.dblayermbg.facade;
 
+import com.google.common.collect.Maps;
+import com.lantone.common.constant.AuthConstant;
+import com.lantone.common.service.RedisService;
 import com.lantone.dblayermbg.service.impl.ResourceServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
 /**
  * <p>
  * 表名:sys_resource 业务类
@@ -11,4 +19,19 @@ import org.springframework.stereotype.Component;
 @Component
 public class ResourceFacade extends ResourceServiceImpl {
 
+    @Autowired
+    private RedisService redisService;
+
+    public Map<String, List<String>> initResourceRolesMap() {
+        Map<String, List<String>> resourceRolesMap = Maps.newHashMap();
+        List<String> resourceRolesList = baseMapper.getResourceRolesMap();
+        resourceRolesList.forEach(resourceRoles -> {
+            String[] resourceRoleArray = resourceRoles.split("=");
+            resourceRolesMap.put(resourceRoleArray[0], Arrays.asList(resourceRoleArray[1].split(",")));
+        });
+        redisService.del(AuthConstant.RESOURCE_ROLES_MAP_KEY);
+        redisService.hSetAll(AuthConstant.RESOURCE_ROLES_MAP_KEY, resourceRolesMap);
+        return resourceRolesMap;
+    }
+
 }

+ 4 - 0
dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/ResourceMapper.java

@@ -3,6 +3,8 @@ package com.lantone.dblayermbg.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.lantone.dblayermbg.entity.Resource;
 
+import java.util.List;
+
 /**
  * <p>
  * 表名:sys_resource Mapper接口
@@ -10,4 +12,6 @@ import com.lantone.dblayermbg.entity.Resource;
  */
 public interface ResourceMapper extends BaseMapper<Resource> {
 
+    List<String> getResourceRolesMap();
+
 }

+ 25 - 0
dblayer-mbg/src/main/resources/mapper/ResourceMapper.xml

@@ -2,4 +2,29 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.lantone.dblayermbg.mapper.ResourceMapper">
 
+    <select id="getResourceRolesMap" resultType="string">
+        SELECT
+        CONCAT(t2.url,'=',GROUP_CONCAT(t1.role_id))
+        FROM
+        (SELECT
+        b.role_id,e.resource_id
+        FROM sys_role a JOIN sys_role_software_menu b ON a.id=b.role_id
+        JOIN sys_software_menu c ON b.software_menu_id=c.id
+        JOIN sys_menu d ON c.menu_id=d.id
+        JOIN sys_menu_resource e ON d.id=e.menu_id
+        WHERE a.is_deleted='N' AND b.is_deleted='N' AND c.is_deleted='N'
+        AND d.is_deleted='N' AND e.is_deleted='N' AND a.`status`='1'
+        AND d.`status`='1') t1
+        JOIN
+        (SELECT
+        b.role_id,c.resource_id,d.url
+        FROM sys_role a JOIN sys_role_software_resource b ON a.id=b.role_id
+        JOIN sys_software_resource c ON b.software_resource_id=c.id
+        JOIN sys_resource d ON c.resource_id=d.id
+        WHERE a.is_deleted='N' AND b.is_deleted='N' AND c.is_deleted='N'
+        AND d.is_deleted='N' AND a.`status`='1' AND d.`status`='1') t2
+        ON t1.role_id=t2.role_id AND t1.resource_id=t2.resource_id
+        GROUP BY t2.url
+    </select>
+
 </mapper>

+ 6 - 1
security-center/src/main/java/com/lantone/security/component/ResourceRoleRulesHolder.java

@@ -1,5 +1,7 @@
 package com.lantone.security.component;
 
+import com.lantone.dblayermbg.facade.ResourceFacade;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.PostConstruct;
@@ -12,12 +14,15 @@ import javax.annotation.PostConstruct;
 @Component
 public class ResourceRoleRulesHolder {
 
+    @Autowired
+    private ResourceFacade resourceFacade;
+
     /**
      * 预加载所有权限
      */
     @PostConstruct
     public void initResourceRolesMap() {
-
+        resourceFacade.initResourceRolesMap();
     }
 
 }