疯狂的狮子Li
2021-12-17 3fce90dbb923fe56c7c579c195060f78d81ae774
update 优化数据权限缓存合并为一个 标注版本注释
已修改5个文件
23 ■■■■■ 文件已修改
ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataColumn.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataPermission.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/enums/DataScopeType.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/handler/PlusDataPermissionHandler.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/PlusDataPermissionInterceptor.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataColumn.java
@@ -6,6 +6,7 @@
 * 数据权限
 *
 * @author Lion Li
 * @version 3.5.0
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataPermission.java
@@ -6,6 +6,7 @@
 * 数据权限组
 *
 * @author Lion Li
 * @version 3.5.0
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
ruoyi-common/src/main/java/com/ruoyi/common/enums/DataScopeType.java
@@ -15,6 +15,7 @@
 * 如需扩展更多自定义服务 可以参考 sdss 自行编写
 *
 * @author Lion Li
 * @version 3.5.0
 */
@Getter
@AllArgsConstructor
ruoyi-framework/src/main/java/com/ruoyi/framework/handler/PlusDataPermissionHandler.java
@@ -41,15 +41,15 @@
 * 数据权限过滤
 *
 * @author Lion Li
 * @version 3.5.0
 */
@Slf4j
public class PlusDataPermissionHandler {
    /**
     * 方法或类 与 注解的映射关系缓存
     * 方法或类(名称) 与 注解的映射关系缓存
     */
    private final Map<Method, DataPermission> methodCacheMap = new ConcurrentHashMap<>();
    private final Map<Class<?>, DataPermission> classCacheMap = new ConcurrentHashMap<>();
    private final Map<String, DataPermission> dataPermissionCacheMap = new ConcurrentHashMap<>();
    /**
     * 无效注解方法缓存用于快速返回
@@ -154,24 +154,24 @@
        DataPermission dataPermission;
        // 获取方法注解
        for (Method method : methods) {
            dataPermission = methodCacheMap.get(method);
            dataPermission = dataPermissionCacheMap.get(method.getName());
            if (ObjectUtil.isNotNull(dataPermission)) {
                return dataPermission.value();
            }
            if (AnnotationUtil.hasAnnotation(method, DataPermission.class)) {
                dataPermission = AnnotationUtil.getAnnotation(method, DataPermission.class);
                methodCacheMap.put(method, dataPermission);
                dataPermissionCacheMap.put(method.getName(), dataPermission);
                return dataPermission.value();
            }
        }
        dataPermission = classCacheMap.get(clazz);
        dataPermission = dataPermissionCacheMap.get(clazz.getName());
        if (ObjectUtil.isNotNull(dataPermission)) {
            return dataPermission.value();
        }
        // 获取类注解
        if (AnnotationUtil.hasAnnotation(clazz, DataPermission.class)) {
            dataPermission = AnnotationUtil.getAnnotation(clazz, DataPermission.class);
            classCacheMap.put(clazz, dataPermission);
            dataPermissionCacheMap.put(clazz.getName(), dataPermission);
            return dataPermission.value();
        }
        return null;
ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/PlusDataPermissionInterceptor.java
@@ -24,6 +24,12 @@
import java.sql.SQLException;
import java.util.List;
/**
 * 数据权限拦截器
 *
 * @author Lion Li
 * @version 3.5.0
 */
public class PlusDataPermissionInterceptor extends JsqlParserSupport implements InnerInterceptor {
    private final PlusDataPermissionHandler dataPermissionHandler = new PlusDataPermissionHandler();