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 @@ ${revision} + + + top.continew + continew-starter-extension-datapermission-core + ${revision} + + + + top.continew + continew-starter-extension-datapermission-mp + ${revision} + + top.continew diff --git a/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/pom.xml b/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/pom.xml new file mode 100644 index 0000000..4e0bf41 --- /dev/null +++ b/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/pom.xml @@ -0,0 +1,14 @@ + + + 4.0.0 + + top.continew + continew-starter-extension-datapermission + ${revision} + + + continew-starter-extension-datapermission-core + ContiNew Starter 扩展模块 - 数据权限 - 核心模块 + \ No newline at end of file diff --git a/continew-starter-data/continew-starter-data-mp/src/main/java/top/continew/starter/data/mp/datapermission/DataPermission.java b/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/annotation/DataPermission.java similarity index 95% rename from continew-starter-data/continew-starter-data-mp/src/main/java/top/continew/starter/data/mp/datapermission/DataPermission.java rename to continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/annotation/DataPermission.java index 06551af..db288ee 100644 --- a/continew-starter-data/continew-starter-data-mp/src/main/java/top/continew/starter/data/mp/datapermission/DataPermission.java +++ b/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/annotation/DataPermission.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package top.continew.starter.data.mp.datapermission; +package top.continew.starter.extension.datapermission.annotation; import java.lang.annotation.*; diff --git a/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/autoconfigure/DataPermissionProperties.java b/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/autoconfigure/DataPermissionProperties.java new file mode 100644 index 0000000..20c4e6c --- /dev/null +++ b/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/autoconfigure/DataPermissionProperties.java @@ -0,0 +1,43 @@ +/* + * 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.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 roles; + private Set roles; /** * 部门 ID */ private String deptId; - /** - * 当前用户角色信息 - */ - public static class CurrentUserRole { - - /** - * 角色 ID - */ - private String roleId; - - /** - * 数据权限 - */ - private DataScope dataScope; - - public CurrentUserRole() { - } - - public CurrentUserRole(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; - } - } - public String getUserId() { return userId; } @@ -89,11 +49,11 @@ public void setUserId(String userId) { this.userId = userId; } - public Set getRoles() { + public Set getRoles() { return roles; } - public void setRoles(Set roles) { + public void setRoles(Set roles) { this.roles = roles; } diff --git a/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-mp/pom.xml b/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-mp/pom.xml new file mode 100644 index 0000000..076b50f --- /dev/null +++ b/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-mp/pom.xml @@ -0,0 +1,28 @@ + + + 4.0.0 + + top.continew + continew-starter-extension-datapermission + ${revision} + + + continew-starter-extension-datapermission-mp + ContiNew Starter 扩展模块 - 数据权限 - MyBatis Plus ORM 模块 + + + + + com.baomidou + mybatis-plus-extension + + + + + top.continew + continew-starter-extension-datapermission-core + + + \ No newline at end of file diff --git a/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-mp/src/main/java/top/continew/starter/extension/datapermission/autoconfigure/DataPermissionAutoConfiguration.java b/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-mp/src/main/java/top/continew/starter/extension/datapermission/autoconfigure/DataPermissionAutoConfiguration.java new file mode 100644 index 0000000..ae2b220 --- /dev/null +++ b/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-mp/src/main/java/top/continew/starter/extension/datapermission/autoconfigure/DataPermissionAutoConfiguration.java @@ -0,0 +1,84 @@ +/* + * 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.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 roles = currentUser.getRoles(); - for (DataPermissionCurrentUser.CurrentUserRole role : roles) { - DataScope dataScope = role.getDataScope(); + UserContext userContext = dataPermissionUserContextProvider.getUserContext(); + Set roles = userContext.getRoles(); + for (RoleContext roleContext : roles) { + DataScope dataScope = roleContext.getDataScope(); if (DataScope.ALL.equals(dataScope)) { return where; } switch (dataScope) { case DEPT_AND_CHILD -> expression = this - .buildDeptAndChildExpression(dataPermission, currentUser, expression); - case DEPT -> expression = this.buildDeptExpression(dataPermission, currentUser, expression); - case SELF -> expression = this.buildSelfExpression(dataPermission, currentUser, expression); - case CUSTOM -> expression = this.buildCustomExpression(dataPermission, role, expression); + .buildDeptAndChildExpression(dataPermission, userContext, expression); + case DEPT -> expression = this.buildDeptExpression(dataPermission, userContext, expression); + case SELF -> expression = this.buildSelfExpression(dataPermission, userContext, expression); + case CUSTOM -> expression = this.buildCustomExpression(dataPermission, roleContext, expression); default -> throw new IllegalArgumentException("暂不支持 [%s] 数据权限".formatted(dataScope)); } } @@ -117,12 +122,12 @@ private Expression buildDataScopeFilter(DataPermission dataPermission, Expressio *

* * @param dataPermission 数据权限 - * @param currentUser 当前用户 + * @param userContext 用户上下文 * @param expression 处理前的表达式 * @return 处理完后的表达式 */ private Expression buildDeptAndChildExpression(DataPermission dataPermission, - DataPermissionCurrentUser currentUser, + UserContext userContext, Expression expression) { ParenthesedSelect subSelect = new ParenthesedSelect(); PlainSelect select = new PlainSelect(); @@ -130,10 +135,10 @@ private Expression buildDeptAndChildExpression(DataPermission dataPermission, select.setFromItem(new Table(dataPermission.deptTableAlias())); EqualsTo equalsTo = new EqualsTo(); equalsTo.setLeftExpression(new Column(dataPermission.id())); - equalsTo.setRightExpression(new LongValue(currentUser.getDeptId())); + equalsTo.setRightExpression(new LongValue(userContext.getDeptId())); Function function = new Function(); function.setName("find_in_set"); - function.setParameters(new ExpressionList(new LongValue(currentUser.getDeptId()), new Column("ancestors"))); + function.setParameters(new ExpressionList(new LongValue(userContext.getDeptId()), new Column("ancestors"))); select.setWhere(new OrExpression(equalsTo, function)); subSelect.setSelect(select); // 构建父查询 @@ -151,16 +156,16 @@ private Expression buildDeptAndChildExpression(DataPermission dataPermission, *

* * @param dataPermission 数据权限 - * @param currentUser 当前用户 + * @param userContext 用户上下文 * @param expression 处理前的表达式 * @return 处理完后的表达式 */ private Expression buildDeptExpression(DataPermission dataPermission, - DataPermissionCurrentUser currentUser, + UserContext userContext, Expression expression) { EqualsTo equalsTo = new EqualsTo(); equalsTo.setLeftExpression(this.buildColumn(dataPermission.tableAlias(), dataPermission.deptId())); - equalsTo.setRightExpression(new LongValue(currentUser.getDeptId())); + equalsTo.setRightExpression(new LongValue(userContext.getDeptId())); return null != expression ? new OrExpression(expression, equalsTo) : equalsTo; } @@ -172,16 +177,16 @@ private Expression buildDeptExpression(DataPermission dataPermission, *

* * @param dataPermission 数据权限 - * @param currentUser 当前用户 + * @param userContext 用户上下文 * @param expression 处理前的表达式 * @return 处理完后的表达式 */ private Expression buildSelfExpression(DataPermission dataPermission, - DataPermissionCurrentUser currentUser, + UserContext userContext, Expression expression) { EqualsTo equalsTo = new EqualsTo(); equalsTo.setLeftExpression(this.buildColumn(dataPermission.tableAlias(), dataPermission.userId())); - equalsTo.setRightExpression(new LongValue(currentUser.getUserId())); + equalsTo.setRightExpression(new LongValue(userContext.getUserId())); return null != expression ? new OrExpression(expression, equalsTo) : equalsTo; } @@ -194,12 +199,12 @@ private Expression buildSelfExpression(DataPermission dataPermission, *

* * @param dataPermission 数据权限 - * @param role 当前用户角色 + * @param roleContext 角色上下文 * @param expression 处理前的表达式 * @return 处理完后的表达式 */ private Expression buildCustomExpression(DataPermission dataPermission, - DataPermissionCurrentUser.CurrentUserRole role, + RoleContext roleContext, Expression expression) { ParenthesedSelect subSelect = new ParenthesedSelect(); PlainSelect select = new PlainSelect(); @@ -207,7 +212,7 @@ private Expression buildCustomExpression(DataPermission dataPermission, select.setFromItem(new Table(dataPermission.roleDeptTableAlias())); EqualsTo equalsTo = new EqualsTo(); equalsTo.setLeftExpression(new Column(dataPermission.roleId())); - equalsTo.setRightExpression(new LongValue(role.getRoleId())); + equalsTo.setRightExpression(new LongValue(roleContext.getRoleId())); select.setWhere(equalsTo); subSelect.setSelect(select); // 构建父查询 diff --git a/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-mp/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-mp/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..a57e6fc --- /dev/null +++ b/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-mp/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +top.continew.starter.extension.datapermission.autoconfigure.DataPermissionAutoConfiguration \ No newline at end of file diff --git a/continew-starter-extension/continew-starter-extension-datapermission/pom.xml b/continew-starter-extension/continew-starter-extension-datapermission/pom.xml new file mode 100644 index 0000000..9d24abb --- /dev/null +++ b/continew-starter-extension/continew-starter-extension-datapermission/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + + top.continew + continew-starter-extension + ${revision} + + + continew-starter-extension-datapermission + pom + ContiNew Starter 扩展模块 - 数据权限 + + + continew-starter-extension-datapermission-core + continew-starter-extension-datapermission-mp + + \ No newline at end of file