|
@@ -8,7 +8,6 @@ import cn.iocoder.yudao.framework.security.core.LoginUser;
|
|
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
|
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
|
import cn.iocoder.yudao.module.pms.api.permission.DevicePersonPermissionApi;
|
|
import cn.iocoder.yudao.module.pms.api.permission.DevicePersonPermissionApi;
|
|
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
|
|
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
|
|
-import lombok.AllArgsConstructor;
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import net.sf.jsqlparser.expression.Alias;
|
|
import net.sf.jsqlparser.expression.Alias;
|
|
import net.sf.jsqlparser.expression.Expression;
|
|
import net.sf.jsqlparser.expression.Expression;
|
|
@@ -20,11 +19,10 @@ import java.util.Set;
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 基于 设备责任人 的数据权限
|
|
|
|
|
|
+ * 基于 设备责任人 的数据权限规则
|
|
*
|
|
*
|
|
* @author ruiqi
|
|
* @author ruiqi
|
|
*/
|
|
*/
|
|
-@AllArgsConstructor
|
|
|
|
@Slf4j
|
|
@Slf4j
|
|
public class DevicePersonDataPermissionRule implements DataPermissionRule {
|
|
public class DevicePersonDataPermissionRule implements DataPermissionRule {
|
|
|
|
|
|
@@ -36,6 +34,9 @@ public class DevicePersonDataPermissionRule implements DataPermissionRule {
|
|
// 存储表配置:key=表名, value=关联字段配置
|
|
// 存储表配置:key=表名, value=关联字段配置
|
|
private final Map<String, TableConfig> tableConfigs = new ConcurrentHashMap<>();
|
|
private final Map<String, TableConfig> tableConfigs = new ConcurrentHashMap<>();
|
|
|
|
|
|
|
|
+ // 只对特定表生效
|
|
|
|
+ private Set<String> enabledTables = new HashSet<>();
|
|
|
|
+
|
|
private final DevicePersonPermissionApi devicePersonService;
|
|
private final DevicePersonPermissionApi devicePersonService;
|
|
|
|
|
|
private final DevicePermissionConfig devicePermissionConfig;
|
|
private final DevicePermissionConfig devicePermissionConfig;
|
|
@@ -45,15 +46,55 @@ public class DevicePersonDataPermissionRule implements DataPermissionRule {
|
|
*/
|
|
*/
|
|
private final Set<String> TABLE_NAMES = new HashSet<>();
|
|
private final Set<String> TABLE_NAMES = new HashSet<>();
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 简化构造函数
|
|
|
|
+ */
|
|
|
|
+ public DevicePersonDataPermissionRule(DevicePersonPermissionApi devicePersonService,
|
|
|
|
+ DevicePermissionConfig devicePermissionConfig) {
|
|
|
|
+ this.devicePersonService = devicePersonService;
|
|
|
|
+ this.devicePermissionConfig = devicePermissionConfig;
|
|
|
|
+ // 初始化配置
|
|
|
|
+ initTableConfigs();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 初始化表配置
|
|
|
|
+ */
|
|
|
|
+ private void initTableConfigs() {
|
|
|
|
+ for (Class<?> entity : devicePermissionConfig.getMainEntities()) {
|
|
|
|
+ DevicePermissionConfig.SubTableConfig subConfig =
|
|
|
|
+ devicePermissionConfig.getSubTableConfig(entity);
|
|
|
|
+ if (subConfig != null) {
|
|
|
|
+ String mainTable = TableInfoHelper.getTableInfo(entity).getTableName();
|
|
|
|
+ tableConfigs.put(mainTable, new TableConfig(
|
|
|
|
+ "id", // 主键默认为id
|
|
|
|
+ subConfig.getSubTable(),
|
|
|
|
+ subConfig.getJoinColumn(),
|
|
|
|
+ subConfig.getDeviceColumn()
|
|
|
|
+ ));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
public Set<String> getTableNames() {
|
|
public Set<String> getTableNames() {
|
|
- return TABLE_NAMES;
|
|
|
|
|
|
+ return enabledTables;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public void setEnabledTables(Set<String> enabledTables) {
|
|
|
|
+ this.enabledTables = enabledTables;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public Expression getExpression(String tableName, Alias tableAlias) {
|
|
public Expression getExpression(String tableName, Alias tableAlias) {
|
|
|
|
+
|
|
|
|
+ // 只对配置的表生效
|
|
|
|
+ if (!enabledTables.contains(tableName)) {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+
|
|
// 1. 获取表配置
|
|
// 1. 获取表配置
|
|
- TableConfig config = getTableConfig(tableName);
|
|
|
|
|
|
+ TableConfig config = tableConfigs.get(tableName);
|
|
if (config == null) return null;
|
|
if (config == null) return null;
|
|
|
|
|
|
// 1. 获取当前登录用户
|
|
// 1. 获取当前登录用户
|
|
@@ -171,7 +212,7 @@ public class DevicePersonDataPermissionRule implements DataPermissionRule {
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 表配置类(替代record)
|
|
|
|
|
|
+ * 表配置类
|
|
*/
|
|
*/
|
|
private static class TableConfig {
|
|
private static class TableConfig {
|
|
private final String primaryKey;
|
|
private final String primaryKey;
|