diff --git a/continew-starter-core/src/main/java/top/continew/starter/core/constant/PropertiesConstants.java b/continew-starter-core/src/main/java/top/continew/starter/core/constant/PropertiesConstants.java
index 6511f5c..a335a39 100644
--- a/continew-starter-core/src/main/java/top/continew/starter/core/constant/PropertiesConstants.java
+++ b/continew-starter-core/src/main/java/top/continew/starter/core/constant/PropertiesConstants.java
@@ -119,6 +119,11 @@ public class PropertiesConstants {
*/
public static final String MESSAGING_WEBSOCKET = MESSAGING + StringConstants.DOT + "websocket";
+ /**
+ * 数据权限配置
+ */
+ public static final String DATA_PERMISSION = CONTINEW_STARTER + StringConstants.DOT + "data-permission";
+
/**
* 多租户配置
*/
diff --git a/continew-starter-data/continew-starter-data-mp/src/main/java/top/continew/starter/data/mp/autoconfigure/MyBatisPlusExtensionProperties.java b/continew-starter-data/continew-starter-data-mp/src/main/java/top/continew/starter/data/mp/autoconfigure/MyBatisPlusExtensionProperties.java
index 4d046db..ecaf070 100644
--- a/continew-starter-data/continew-starter-data-mp/src/main/java/top/continew/starter/data/mp/autoconfigure/MyBatisPlusExtensionProperties.java
+++ b/continew-starter-data/continew-starter-data-mp/src/main/java/top/continew/starter/data/mp/autoconfigure/MyBatisPlusExtensionProperties.java
@@ -49,11 +49,6 @@ public class MyBatisPlusExtensionProperties {
@NestedConfigurationProperty
private MyBatisPlusIdGeneratorProperties idGenerator;
- /**
- * 数据权限插件配置
- */
- private DataPermissionProperties dataPermission;
-
/**
* 分页插件配置
*/
@@ -69,25 +64,6 @@ public class MyBatisPlusExtensionProperties {
*/
private boolean blockAttackPluginEnabled = true;
- /**
- * 数据权限插件配置属性
- */
- public static class DataPermissionProperties {
-
- /**
- * 是否启用数据权限插件
- */
- private boolean enabled = false;
-
- public boolean isEnabled() {
- return enabled;
- }
-
- public void setEnabled(boolean enabled) {
- this.enabled = enabled;
- }
- }
-
/**
* 分页插件配置属性
*/
@@ -170,14 +146,6 @@ public void setIdGenerator(MyBatisPlusIdGeneratorProperties idGenerator) {
this.idGenerator = idGenerator;
}
- public DataPermissionProperties getDataPermission() {
- return dataPermission;
- }
-
- public void setDataPermission(DataPermissionProperties dataPermission) {
- this.dataPermission = dataPermission;
- }
-
public PaginationProperties getPagination() {
return pagination;
}
diff --git a/continew-starter-data/continew-starter-data-mp/src/main/java/top/continew/starter/data/mp/autoconfigure/MybatisPlusAutoConfiguration.java b/continew-starter-data/continew-starter-data-mp/src/main/java/top/continew/starter/data/mp/autoconfigure/MybatisPlusAutoConfiguration.java
index 50cec97..bda788f 100644
--- a/continew-starter-data/continew-starter-data-mp/src/main/java/top/continew/starter/data/mp/autoconfigure/MybatisPlusAutoConfiguration.java
+++ b/continew-starter-data/continew-starter-data-mp/src/main/java/top/continew/starter/data/mp/autoconfigure/MybatisPlusAutoConfiguration.java
@@ -19,7 +19,6 @@
import cn.hutool.extra.spring.SpringUtil;
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusPropertiesCustomizer;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
-import com.baomidou.mybatisplus.extension.plugins.handler.DataPermissionHandler;
import com.baomidou.mybatisplus.extension.plugins.inner.*;
import jakarta.annotation.PostConstruct;
import org.mybatis.spring.annotation.MapperScan;
@@ -37,8 +36,6 @@
import top.continew.starter.core.constant.PropertiesConstants;
import top.continew.starter.core.util.GeneralPropertySourceFactory;
import top.continew.starter.data.mp.autoconfigure.idgenerator.MyBatisPlusIdGeneratorConfiguration;
-import top.continew.starter.data.mp.datapermission.DataPermissionFilter;
-import top.continew.starter.data.mp.datapermission.DataPermissionHandlerImpl;
import top.continew.starter.data.mp.handler.MybatisBaseEnumTypeHandler;
import java.util.Map;
@@ -81,13 +78,6 @@ public MybatisPlusInterceptor mybatisPlusInterceptor(MyBatisPlusExtensionPropert
if (!innerInterceptors.isEmpty()) {
innerInterceptors.values().forEach(interceptor::addInnerInterceptor);
}
- // 数据权限插件
- MyBatisPlusExtensionProperties.DataPermissionProperties dataPermissionProperties = properties
- .getDataPermission();
- if (null != dataPermissionProperties && dataPermissionProperties.isEnabled()) {
- interceptor.addInnerInterceptor(new DataPermissionInterceptor(SpringUtil
- .getBean(DataPermissionHandler.class)));
- }
// 分页插件
MyBatisPlusExtensionProperties.PaginationProperties paginationProperties = properties.getPagination();
if (null != paginationProperties && paginationProperties.isEnabled()) {
@@ -112,16 +102,6 @@ public MybatisPlusInterceptor mybatisPlusInterceptor(MyBatisPlusExtensionPropert
MyBatisPlusIdGeneratorConfiguration.Custom.class})
protected static class MyBatisPlusIdGeneratorAutoConfiguration {}
- /**
- * 数据权限处理器
- */
- @Bean
- @ConditionalOnMissingBean
- @ConditionalOnEnabledDataPermission
- public DataPermissionHandler dataPermissionHandler(DataPermissionFilter dataPermissionFilter) {
- return new DataPermissionHandlerImpl(dataPermissionFilter);
- }
-
/**
* 分页插件配置(PaginationInnerInterceptor)
*/
diff --git a/continew-starter-dependencies/pom.xml b/continew-starter-dependencies/pom.xml
index ce1d332..9c2cc82 100644
--- a/continew-starter-dependencies/pom.xml
+++ b/continew-starter-dependencies/pom.xml
@@ -359,6 +359,19 @@
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package top.continew.starter.extension.datapermission.autoconfigure;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import top.continew.starter.core.constant.PropertiesConstants;
+
+/**
+ * 数据权限配置属性
+ *
+ * @author Charles7c
+ * @since 2.7.0
+ */
+@ConfigurationProperties(PropertiesConstants.DATA_PERMISSION)
+public class DataPermissionProperties {
+
+ /**
+ * 是否启用多租户
+ */
+ private boolean enabled = true;
+
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ public void setEnabled(boolean enabled) {
+ this.enabled = enabled;
+ }
+}
diff --git a/continew-starter-data/continew-starter-data-mp/src/main/java/top/continew/starter/data/mp/datapermission/DataScope.java b/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/enums/DataScope.java
similarity index 94%
rename from continew-starter-data/continew-starter-data-mp/src/main/java/top/continew/starter/data/mp/datapermission/DataScope.java
rename to continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/enums/DataScope.java
index 5aa4333..423bc71 100644
--- a/continew-starter-data/continew-starter-data-mp/src/main/java/top/continew/starter/data/mp/datapermission/DataScope.java
+++ b/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/enums/DataScope.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package top.continew.starter.data.mp.datapermission;
+package top.continew.starter.extension.datapermission.enums;
/**
* 数据权限枚举
diff --git a/continew-starter-data/continew-starter-data-mp/src/main/java/top/continew/starter/data/mp/datapermission/DataPermissionFilter.java b/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/filter/DataPermissionUserContextProvider.java
similarity index 71%
rename from continew-starter-data/continew-starter-data-mp/src/main/java/top/continew/starter/data/mp/datapermission/DataPermissionFilter.java
rename to continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/filter/DataPermissionUserContextProvider.java
index 062b7fd..2f78ec1 100644
--- a/continew-starter-data/continew-starter-data-mp/src/main/java/top/continew/starter/data/mp/datapermission/DataPermissionFilter.java
+++ b/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/filter/DataPermissionUserContextProvider.java
@@ -14,15 +14,17 @@
* limitations under the License.
*/
-package top.continew.starter.data.mp.datapermission;
+package top.continew.starter.extension.datapermission.filter;
+
+import top.continew.starter.extension.datapermission.model.UserContext;
/**
- * 数据权限过滤器接口
+ * 数据权限用户上下文提供者
*
* @author Charles7c
* @since 1.1.0
*/
-public interface DataPermissionFilter {
+public interface DataPermissionUserContextProvider {
/**
* 是否过滤
@@ -32,9 +34,9 @@ public interface DataPermissionFilter {
boolean isFilter();
/**
- * 获取当前用户信息
+ * 获取用户上下文
*
- * @return 当前用户信息
+ * @return 用户上下文
*/
- DataPermissionCurrentUser getCurrentUser();
+ UserContext getUserContext();
}
diff --git a/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/model/RoleContext.java b/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/model/RoleContext.java
new file mode 100644
index 0000000..80f3d64
--- /dev/null
+++ b/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/model/RoleContext.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved.
+ *
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package top.continew.starter.extension.datapermission.model;
+
+import top.continew.starter.extension.datapermission.enums.DataScope;
+
+/**
+ * 角色上下文
+ *
+ * @author Charles7c
+ * @since 1.1.0
+ */
+public class RoleContext {
+
+ /**
+ * 角色 ID
+ */
+ private String roleId;
+
+ /**
+ * 数据权限
+ */
+ private DataScope dataScope;
+
+ public RoleContext() {
+ }
+
+ public RoleContext(String roleId, DataScope dataScope) {
+ this.roleId = roleId;
+ this.dataScope = dataScope;
+ }
+
+ public String getRoleId() {
+ return roleId;
+ }
+
+ public void setRoleId(String roleId) {
+ this.roleId = roleId;
+ }
+
+ public DataScope getDataScope() {
+ return dataScope;
+ }
+
+ public void setDataScope(DataScope dataScope) {
+ this.dataScope = dataScope;
+ }
+}
diff --git a/continew-starter-data/continew-starter-data-mp/src/main/java/top/continew/starter/data/mp/datapermission/DataPermissionCurrentUser.java b/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/model/UserContext.java
similarity index 53%
rename from continew-starter-data/continew-starter-data-mp/src/main/java/top/continew/starter/data/mp/datapermission/DataPermissionCurrentUser.java
rename to continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/model/UserContext.java
index ebf4ef4..765e216 100644
--- a/continew-starter-data/continew-starter-data-mp/src/main/java/top/continew/starter/data/mp/datapermission/DataPermissionCurrentUser.java
+++ b/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/model/UserContext.java
@@ -14,17 +14,17 @@
* limitations under the License.
*/
-package top.continew.starter.data.mp.datapermission;
+package top.continew.starter.extension.datapermission.model;
import java.util.Set;
/**
- * 当前用户信息
+ * 用户上下文
*
* @author Charles7c
* @since 1.1.0
*/
-public class DataPermissionCurrentUser {
+public class UserContext {
/**
* 用户 ID
@@ -34,53 +34,13 @@ public class DataPermissionCurrentUser {
/**
* 角色列表
*/
- private Set
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package top.continew.starter.extension.datapermission.autoconfigure;
+
+import com.baomidou.mybatisplus.extension.plugins.handler.DataPermissionHandler;
+import com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.NoSuchBeanDefinitionException;
+import org.springframework.boot.autoconfigure.AutoConfiguration;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.core.ResolvableType;
+import top.continew.starter.core.constant.PropertiesConstants;
+import top.continew.starter.extension.datapermission.filter.DataPermissionUserContextProvider;
+import top.continew.starter.extension.datapermission.handler.DefaultDataPermissionHandler;
+
+/**
+ * 数据权限自动配置
+ *
+ * @author Charles7c
+ * @since 2.7.0
+ */
+@AutoConfiguration
+@EnableConfigurationProperties(DataPermissionProperties.class)
+@ConditionalOnProperty(prefix = PropertiesConstants.DATA_PERMISSION, name = PropertiesConstants.ENABLED, havingValue = "true", matchIfMissing = true)
+public class DataPermissionAutoConfiguration {
+
+ private static final Logger log = LoggerFactory.getLogger(DataPermissionAutoConfiguration.class);
+
+ private DataPermissionAutoConfiguration() {
+ }
+
+ /**
+ * 数据权限拦截器
+ */
+ @Bean
+ @ConditionalOnMissingBean
+ public DataPermissionInterceptor dataPermissionInterceptor(DataPermissionHandler dataPermissionHandler) {
+ return new DataPermissionInterceptor(dataPermissionHandler);
+ }
+
+ /**
+ * 数据权限处理器
+ */
+ @Bean
+ @ConditionalOnMissingBean
+ public DataPermissionHandler dataPermissionHandler(DataPermissionUserContextProvider dataPermissionUserContextProvider) {
+ return new DefaultDataPermissionHandler(dataPermissionUserContextProvider);
+ }
+
+ /**
+ * 数据权限用户上下文提供者
+ */
+ @Bean
+ @ConditionalOnMissingBean
+ public DataPermissionUserContextProvider dataPermissionUserContextProvider() {
+ if (log.isErrorEnabled()) {
+ log.error("Consider defining a bean of type '{}' in your configuration.", ResolvableType
+ .forClass(DataPermissionUserContextProvider.class));
+ }
+ throw new NoSuchBeanDefinitionException(DataPermissionUserContextProvider.class);
+ }
+
+ static {
+ log.debug("[ContiNew Starter] - Auto Configuration 'DataPermission' completed initialization.");
+ }
+}
diff --git a/continew-starter-data/continew-starter-data-mp/src/main/java/top/continew/starter/data/mp/datapermission/DataPermissionHandlerImpl.java b/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-mp/src/main/java/top/continew/starter/extension/datapermission/handler/DefaultDataPermissionHandler.java
similarity index 80%
rename from continew-starter-data/continew-starter-data-mp/src/main/java/top/continew/starter/data/mp/datapermission/DataPermissionHandlerImpl.java
rename to continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-mp/src/main/java/top/continew/starter/extension/datapermission/handler/DefaultDataPermissionHandler.java
index d8802e5..b74153c 100644
--- a/continew-starter-data/continew-starter-data-mp/src/main/java/top/continew/starter/data/mp/datapermission/DataPermissionHandlerImpl.java
+++ b/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-mp/src/main/java/top/continew/starter/extension/datapermission/handler/DefaultDataPermissionHandler.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package top.continew.starter.data.mp.datapermission;
+package top.continew.starter.extension.datapermission.handler;
import cn.hutool.core.text.CharSequenceUtil;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -36,25 +36,30 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import top.continew.starter.core.constant.StringConstants;
+import top.continew.starter.extension.datapermission.annotation.DataPermission;
+import top.continew.starter.extension.datapermission.enums.DataScope;
+import top.continew.starter.extension.datapermission.filter.DataPermissionUserContextProvider;
+import top.continew.starter.extension.datapermission.model.RoleContext;
+import top.continew.starter.extension.datapermission.model.UserContext;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Set;
/**
- * 数据权限处理器实现类
+ * 默认数据权限处理器
*
* @author DataPermissionInterceptor 如何使用?
* @author Charles7c
* @since 1.1.0
*/
-public class DataPermissionHandlerImpl implements DataPermissionHandler {
+public class DefaultDataPermissionHandler implements DataPermissionHandler {
- private static final Logger log = LoggerFactory.getLogger(DataPermissionHandlerImpl.class);
- private final DataPermissionFilter dataPermissionFilter;
+ private static final Logger log = LoggerFactory.getLogger(DefaultDataPermissionHandler.class);
+ private final DataPermissionUserContextProvider dataPermissionUserContextProvider;
- public DataPermissionHandlerImpl(DataPermissionFilter dataPermissionFilter) {
- this.dataPermissionFilter = dataPermissionFilter;
+ public DefaultDataPermissionHandler(DataPermissionUserContextProvider dataPermissionUserContextProvider) {
+ this.dataPermissionUserContextProvider = dataPermissionUserContextProvider;
}
@Override
@@ -70,7 +75,7 @@ public Expression getSqlSegment(Expression where, String mappedStatementId) {
if (null == dataPermission || !CharSequenceUtil.equalsAny(methodName, name, name + "_COUNT")) {
continue;
}
- if (dataPermissionFilter.isFilter()) {
+ if (dataPermissionUserContextProvider.isFilter()) {
return buildDataScopeFilter(dataPermission, where);
}
}
@@ -89,19 +94,19 @@ public Expression getSqlSegment(Expression where, String mappedStatementId) {
*/
private Expression buildDataScopeFilter(DataPermission dataPermission, Expression where) {
Expression expression = null;
- DataPermissionCurrentUser currentUser = dataPermissionFilter.getCurrentUser();
- Set