From b81715414705f0f4489f6ddb583cc7fe432c556a Mon Sep 17 00:00:00 2001
From: zhongrijian <646384940@qq.com>
Date: Fri, 31 May 2024 09:49:48 +0800
Subject: [PATCH] socpe 配置修改
---
src/main/java/org/springblade/common/handle/BladeScopeModelHandlerMaster.java | 78 +++++++++++++++++++++++++++++++++++++++
src/main/java/org/springblade/common/config/BladeScopeDataConfig.java | 20 ++++++++++
2 files changed, 98 insertions(+), 0 deletions(-)
diff --git a/src/main/java/org/springblade/common/config/BladeScopeDataConfig.java b/src/main/java/org/springblade/common/config/BladeScopeDataConfig.java
new file mode 100644
index 0000000..749aaf1
--- /dev/null
+++ b/src/main/java/org/springblade/common/config/BladeScopeDataConfig.java
@@ -0,0 +1,20 @@
+package org.springblade.common.config;
+
+import org.springblade.common.handle.BladeScopeModelHandlerMaster;
+import org.springblade.core.datascope.handler.ScopeModelHandler;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.jdbc.core.JdbcTemplate;
+
+@Configuration(proxyBeanMethods = false)
+public class BladeScopeDataConfig {
+
+ @Autowired
+ private JdbcTemplate jdbcTemplate;
+
+ @Bean
+ public ScopeModelHandler scopeModelHandler(){
+ return new BladeScopeModelHandlerMaster(jdbcTemplate);
+ }
+}
diff --git a/src/main/java/org/springblade/common/handle/BladeScopeModelHandlerMaster.java b/src/main/java/org/springblade/common/handle/BladeScopeModelHandlerMaster.java
new file mode 100644
index 0000000..ebd4edc
--- /dev/null
+++ b/src/main/java/org/springblade/common/handle/BladeScopeModelHandlerMaster.java
@@ -0,0 +1,78 @@
+package org.springblade.common.handle;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import lombok.RequiredArgsConstructor;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.datascope.constant.DataScopeConstant;
+import org.springblade.core.datascope.handler.ScopeModelHandler;
+import org.springblade.core.datascope.model.DataScopeModel;
+import org.springblade.core.tool.utils.CollectionUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+@DS("master")
+@RequiredArgsConstructor
+public class BladeScopeModelHandlerMaster implements ScopeModelHandler {
+ private static final String SCOPE_CACHE_CODE = "dataScope:code:";
+ private static final String SCOPE_CACHE_CLASS = "dataScope:class:";
+ private static final String DEPT_CACHE_ANCESTORS = "dept:ancestors:";
+ private static final DataScopeModel SEARCHED_DATA_SCOPE_MODEL;
+ private final JdbcTemplate jdbcTemplate;
+
+ public DataScopeModel getDataScopeByMapper(String mapperId, String roleId) {
+ List<Object> args = new ArrayList(Collections.singletonList(mapperId));
+ List<Long> roleIds = Func.toLongList(roleId);
+ args.addAll(roleIds);
+ DataScopeModel dataScope = (DataScopeModel) CacheUtil.get("blade:sys", "dataScope:class:", mapperId + ":" + roleId, DataScopeModel.class, Boolean.FALSE);
+ if (dataScope == null || !dataScope.getSearched()) {
+ List<DataScopeModel> list = this.jdbcTemplate.query(DataScopeConstant.dataByMapper(roleIds.size()), args.toArray(), new BeanPropertyRowMapper(DataScopeModel.class));
+ if (CollectionUtil.isNotEmpty(list)) {
+ dataScope = (DataScopeModel)list.iterator().next();
+ dataScope.setSearched(Boolean.TRUE);
+ } else {
+ dataScope = SEARCHED_DATA_SCOPE_MODEL;
+ }
+
+ CacheUtil.put("blade:sys", "dataScope:class:", mapperId + ":" + roleId, dataScope, Boolean.FALSE);
+ }
+
+ return StringUtil.isNotBlank(dataScope.getResourceCode()) ? dataScope : null;
+ }
+
+ public DataScopeModel getDataScopeByCode(String code) {
+ DataScopeModel dataScope = (DataScopeModel)CacheUtil.get("blade:sys", "dataScope:code:", code, DataScopeModel.class, Boolean.FALSE);
+ if (dataScope == null || !dataScope.getSearched()) {
+ List<DataScopeModel> list = this.jdbcTemplate.query("select resource_code, scope_column, scope_field, scope_type, scope_value from blade_scope_data where resource_code = ?", new Object[]{code}, new BeanPropertyRowMapper(DataScopeModel.class));
+ if (CollectionUtil.isNotEmpty(list)) {
+ dataScope = (DataScopeModel)list.iterator().next();
+ dataScope.setSearched(Boolean.TRUE);
+ } else {
+ dataScope = SEARCHED_DATA_SCOPE_MODEL;
+ }
+
+ CacheUtil.put("blade:sys", "dataScope:code:", code, dataScope, Boolean.FALSE);
+ }
+
+ return StringUtil.isNotBlank(dataScope.getResourceCode()) ? dataScope : null;
+ }
+
+ public List<Long> getDeptAncestors(Long deptId) {
+ List ancestors = (List)CacheUtil.get("blade:sys", "dept:ancestors:", deptId, List.class);
+ if (CollectionUtil.isEmpty(ancestors)) {
+ ancestors = this.jdbcTemplate.queryForList("select id from blade_dept where ancestors like concat(concat('%', ?),'%') and is_deleted = 0", new Object[]{deptId}, Long.class);
+ CacheUtil.put("blade:sys", "dept:ancestors:", deptId, ancestors);
+ }
+
+ return ancestors;
+ }
+
+ static {
+ SEARCHED_DATA_SCOPE_MODEL = new DataScopeModel(Boolean.TRUE);
+ }
+}
--
Gitblit v1.9.3