对比新文件 |
| | |
| | | package com.iailab.framework.datapermission.core.rule; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.ArrayUtil; |
| | | import com.iailab.framework.datapermission.core.annotation.DataPermission; |
| | | import com.iailab.framework.datapermission.core.aop.DataPermissionContextHolder; |
| | | import lombok.RequiredArgsConstructor; |
| | | |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 默认的 DataPermissionRuleFactoryImpl 实现类 |
| | | * 支持通过 {@link DataPermissionContextHolder} 过滤数据权限 |
| | | * |
| | | * @author iailab |
| | | */ |
| | | @RequiredArgsConstructor |
| | | public class DataPermissionRuleFactoryImpl implements DataPermissionRuleFactory { |
| | | |
| | | /** |
| | | * 数据权限规则数组 |
| | | */ |
| | | private final List<DataPermissionRule> rules; |
| | | |
| | | @Override |
| | | public List<DataPermissionRule> getDataPermissionRules() { |
| | | return rules; |
| | | } |
| | | |
| | | @Override // mappedStatementId 参数,暂时没有用。以后,可以基于 mappedStatementId + DataPermission 进行缓存 |
| | | public List<DataPermissionRule> getDataPermissionRule(String mappedStatementId) { |
| | | // 1. 无数据权限 |
| | | if (CollUtil.isEmpty(rules)) { |
| | | return Collections.emptyList(); |
| | | } |
| | | // 2. 未配置,则默认开启 |
| | | DataPermission dataPermission = DataPermissionContextHolder.get(); |
| | | if (dataPermission == null) { |
| | | return rules; |
| | | } |
| | | // 3. 已配置,但禁用 |
| | | if (!dataPermission.enable()) { |
| | | return Collections.emptyList(); |
| | | } |
| | | |
| | | // 4. 已配置,只选择部分规则 |
| | | if (ArrayUtil.isNotEmpty(dataPermission.includeRules())) { |
| | | return rules.stream().filter(rule -> ArrayUtil.contains(dataPermission.includeRules(), rule.getClass())) |
| | | .collect(Collectors.toList()); // 一般规则不会太多,所以不采用 HashSet 查询 |
| | | } |
| | | // 5. 已配置,只排除部分规则 |
| | | if (ArrayUtil.isNotEmpty(dataPermission.excludeRules())) { |
| | | return rules.stream().filter(rule -> !ArrayUtil.contains(dataPermission.excludeRules(), rule.getClass())) |
| | | .collect(Collectors.toList()); // 一般规则不会太多,所以不采用 HashSet 查询 |
| | | } |
| | | // 6. 已配置,全部规则 |
| | | return rules; |
| | | } |
| | | |
| | | } |