diff --git a/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/filter/DataPermissionUserContextProvider.java b/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/filter/DataPermissionUserDataProvider.java similarity index 77% rename from continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/filter/DataPermissionUserContextProvider.java rename to continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/filter/DataPermissionUserDataProvider.java index 2f78ec14..729b9fd8 100644 --- a/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/filter/DataPermissionUserContextProvider.java +++ b/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/filter/DataPermissionUserDataProvider.java @@ -16,15 +16,15 @@ package top.continew.starter.extension.datapermission.filter; -import top.continew.starter.extension.datapermission.model.UserContext; +import top.continew.starter.extension.datapermission.model.UserData; /** - * 数据权限用户上下文提供者 + * 数据权限用户数据提供者 * * @author Charles7c * @since 1.1.0 */ -public interface DataPermissionUserContextProvider { +public interface DataPermissionUserDataProvider { /** * 是否过滤 @@ -34,9 +34,9 @@ public interface DataPermissionUserContextProvider { boolean isFilter(); /** - * 获取用户上下文 + * 获取用户数据 * - * @return 用户上下文 + * @return 用户数据 */ - UserContext getUserContext(); + UserData getUserData(); } 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/RoleData.java similarity index 70% rename from continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/model/RoleContext.java rename to continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/model/RoleData.java index 80f3d64c..cbc6ef44 100644 --- 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/RoleData.java @@ -19,12 +19,12 @@ package top.continew.starter.extension.datapermission.model; import top.continew.starter.extension.datapermission.enums.DataScope; /** - * 角色上下文 + * 角色数据 * * @author Charles7c * @since 1.1.0 */ -public class RoleContext { +public class RoleData { /** * 角色 ID @@ -36,10 +36,10 @@ public class RoleContext { */ private DataScope dataScope; - public RoleContext() { + public RoleData() { } - public RoleContext(String roleId, DataScope dataScope) { + public RoleData(String roleId, DataScope dataScope) { this.roleId = roleId; this.dataScope = dataScope; } @@ -59,4 +59,20 @@ public class RoleContext { public void setDataScope(DataScope dataScope) { this.dataScope = dataScope; } + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) { + return false; + } + RoleData roleData = (RoleData)o; + return roleId.equals(roleData.roleId) && dataScope == roleData.dataScope; + } + + @Override + public int hashCode() { + int result = roleId.hashCode(); + result = 31 * result + dataScope.hashCode(); + return result; + } } diff --git a/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/model/UserContext.java b/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/model/UserData.java similarity index 87% rename from continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/model/UserContext.java rename to continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/model/UserData.java index 765e216d..dbf69a01 100644 --- a/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/model/UserContext.java +++ b/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-core/src/main/java/top/continew/starter/extension/datapermission/model/UserData.java @@ -19,12 +19,12 @@ package top.continew.starter.extension.datapermission.model; import java.util.Set; /** - * 用户上下文 + * 用户数据 * * @author Charles7c * @since 1.1.0 */ -public class UserContext { +public class UserData { /** * 用户 ID @@ -34,7 +34,7 @@ public class UserContext { /** * 角色列表 */ - private Set roles; + private Set roles; /** * 部门 ID @@ -49,11 +49,11 @@ public class UserContext { 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/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 index ae2b2202..0c03fa05 100644 --- 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 @@ -28,7 +28,7 @@ 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.filter.DataPermissionUserDataProvider; import top.continew.starter.extension.datapermission.handler.DefaultDataPermissionHandler; /** @@ -61,21 +61,21 @@ public class DataPermissionAutoConfiguration { */ @Bean @ConditionalOnMissingBean - public DataPermissionHandler dataPermissionHandler(DataPermissionUserContextProvider dataPermissionUserContextProvider) { - return new DefaultDataPermissionHandler(dataPermissionUserContextProvider); + public DataPermissionHandler dataPermissionHandler(DataPermissionUserDataProvider dataPermissionUserDataProvider) { + return new DefaultDataPermissionHandler(dataPermissionUserDataProvider); } /** - * 数据权限用户上下文提供者 + * 数据权限用户数据提供者 */ @Bean @ConditionalOnMissingBean - public DataPermissionUserContextProvider dataPermissionUserContextProvider() { + public DataPermissionUserDataProvider dataPermissionUserDataProvider() { if (log.isErrorEnabled()) { log.error("Consider defining a bean of type '{}' in your configuration.", ResolvableType - .forClass(DataPermissionUserContextProvider.class)); + .forClass(DataPermissionUserDataProvider.class)); } - throw new NoSuchBeanDefinitionException(DataPermissionUserContextProvider.class); + throw new NoSuchBeanDefinitionException(DataPermissionUserDataProvider.class); } static { diff --git a/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-mp/src/main/java/top/continew/starter/extension/datapermission/handler/DefaultDataPermissionHandler.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 index 7f1817cb..8dfc0ff4 100644 --- a/continew-starter-extension/continew-starter-extension-datapermission/continew-starter-extension-datapermission-mp/src/main/java/top/continew/starter/extension/datapermission/handler/DefaultDataPermissionHandler.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 @@ -47,9 +47,9 @@ import top.continew.starter.data.enums.DatabaseType; import top.continew.starter.data.util.MetaUtils; 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 top.continew.starter.extension.datapermission.filter.DataPermissionUserDataProvider; +import top.continew.starter.extension.datapermission.model.RoleData; +import top.continew.starter.extension.datapermission.model.UserData; /** * 默认数据权限处理器 @@ -61,11 +61,11 @@ import top.continew.starter.extension.datapermission.model.UserContext; public class DefaultDataPermissionHandler implements DataPermissionHandler { private static final Logger log = LoggerFactory.getLogger(DefaultDataPermissionHandler.class); - private final DataPermissionUserContextProvider dataPermissionUserContextProvider; + private final DataPermissionUserDataProvider dataPermissionUserDataProvider; private static final DataSource dataSource = SpringUtil.getBean(DataSource.class); - public DefaultDataPermissionHandler(DataPermissionUserContextProvider dataPermissionUserContextProvider) { - this.dataPermissionUserContextProvider = dataPermissionUserContextProvider; + public DefaultDataPermissionHandler(DataPermissionUserDataProvider dataPermissionUserDataProvider) { + this.dataPermissionUserDataProvider = dataPermissionUserDataProvider; } @Override @@ -81,7 +81,7 @@ public class DefaultDataPermissionHandler implements DataPermissionHandler { if (dataPermission == null || !CharSequenceUtil.equalsAny(methodName, name, name + "_COUNT")) { continue; } - if (dataPermissionUserContextProvider.isFilter()) { + if (dataPermissionUserDataProvider.isFilter()) { return buildDataScopeFilter(dataPermission, where); } } @@ -100,19 +100,19 @@ public class DefaultDataPermissionHandler implements DataPermissionHandler { */ private Expression buildDataScopeFilter(DataPermission dataPermission, Expression where) { Expression expression = null; - UserContext userContext = dataPermissionUserContextProvider.getUserContext(); - Set roles = userContext.getRoles(); - for (RoleContext roleContext : roles) { - DataScope dataScope = roleContext.getDataScope(); + UserData userData = dataPermissionUserDataProvider.getUserData(); + Set roles = userData.getRoles(); + for (RoleData roleData : roles) { + DataScope dataScope = roleData.getDataScope(); if (DataScope.ALL.equals(dataScope)) { return where; } switch (dataScope) { case DEPT_AND_CHILD -> expression = this - .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); + .buildDeptAndChildExpression(dataPermission, userData, expression); + case DEPT -> expression = this.buildDeptExpression(dataPermission, userData, expression); + case SELF -> expression = this.buildSelfExpression(dataPermission, userData, expression); + case CUSTOM -> expression = this.buildCustomExpression(dataPermission, roleData, expression); default -> throw new IllegalArgumentException("暂不支持 [%s] 数据权限".formatted(dataScope)); } } @@ -128,12 +128,12 @@ public class DefaultDataPermissionHandler implements DataPermissionHandler { *

* * @param dataPermission 数据权限 - * @param userContext 用户上下文 + * @param userData 用户数据 * @param expression 处理前的表达式 * @return 处理完后的表达式 */ private Expression buildDeptAndChildExpression(DataPermission dataPermission, - UserContext userContext, + UserData userData, Expression expression) { ParenthesedSelect subSelect = new ParenthesedSelect(); PlainSelect select = new PlainSelect(); @@ -142,14 +142,14 @@ public class DefaultDataPermissionHandler implements DataPermissionHandler { EqualsTo equalsTo = new EqualsTo(); equalsTo.setLeftExpression(new Column(dataPermission.id())); - equalsTo.setRightExpression(new LongValue(userContext.getDeptId())); + equalsTo.setRightExpression(new LongValue(userData.getDeptId())); DatabaseType databaseType = MetaUtils.getDatabaseType(dataSource); Expression inSetExpression; if (DatabaseType.MYSQL.getDatabase().equalsIgnoreCase(databaseType.getDatabase())) { Function findInSetFunction = new Function(); findInSetFunction.setName("find_in_set"); - findInSetFunction.setParameters(new ExpressionList(new LongValue(userContext + findInSetFunction.setParameters(new ExpressionList(new LongValue(userData .getDeptId()), new Column("ancestors"))); inSetExpression = findInSetFunction; } else if (DatabaseType.POSTGRE_SQL.getDatabase().equalsIgnoreCase(databaseType.getDatabase())) { @@ -160,7 +160,7 @@ public class DefaultDataPermissionHandler implements DataPermissionHandler { // 创建 LIKE 函数 LikeExpression likeExpression = new LikeExpression(); likeExpression.setLeftExpression(concatFunction); - likeExpression.setRightExpression(new StringValue("%," + userContext.getDeptId() + ",%")); + likeExpression.setRightExpression(new StringValue("%," + userData.getDeptId() + ",%")); inSetExpression = likeExpression; } else { throw new IllegalArgumentException("暂不支持 [%s] 数据权限".formatted("")); @@ -183,16 +183,14 @@ public class DefaultDataPermissionHandler implements DataPermissionHandler { *

* * @param dataPermission 数据权限 - * @param userContext 用户上下文 + * @param userData 用户数据 * @param expression 处理前的表达式 * @return 处理完后的表达式 */ - private Expression buildDeptExpression(DataPermission dataPermission, - UserContext userContext, - Expression expression) { + private Expression buildDeptExpression(DataPermission dataPermission, UserData userData, Expression expression) { EqualsTo equalsTo = new EqualsTo(); equalsTo.setLeftExpression(this.buildColumn(dataPermission.tableAlias(), dataPermission.deptId())); - equalsTo.setRightExpression(new LongValue(userContext.getDeptId())); + equalsTo.setRightExpression(new LongValue(userData.getDeptId())); return expression != null ? new OrExpression(expression, equalsTo) : equalsTo; } @@ -204,16 +202,14 @@ public class DefaultDataPermissionHandler implements DataPermissionHandler { *

* * @param dataPermission 数据权限 - * @param userContext 用户上下文 + * @param userData 用户数据 * @param expression 处理前的表达式 * @return 处理完后的表达式 */ - private Expression buildSelfExpression(DataPermission dataPermission, - UserContext userContext, - Expression expression) { + private Expression buildSelfExpression(DataPermission dataPermission, UserData userData, Expression expression) { EqualsTo equalsTo = new EqualsTo(); equalsTo.setLeftExpression(this.buildColumn(dataPermission.tableAlias(), dataPermission.userId())); - equalsTo.setRightExpression(new LongValue(userContext.getUserId())); + equalsTo.setRightExpression(new LongValue(userData.getUserId())); return expression != null ? new OrExpression(expression, equalsTo) : equalsTo; } @@ -226,20 +222,18 @@ public class DefaultDataPermissionHandler implements DataPermissionHandler { *

* * @param dataPermission 数据权限 - * @param roleContext 角色上下文 + * @param roleData 角色上下文 * @param expression 处理前的表达式 * @return 处理完后的表达式 */ - private Expression buildCustomExpression(DataPermission dataPermission, - RoleContext roleContext, - Expression expression) { + private Expression buildCustomExpression(DataPermission dataPermission, RoleData roleData, Expression expression) { ParenthesedSelect subSelect = new ParenthesedSelect(); PlainSelect select = new PlainSelect(); select.setSelectItems(Collections.singletonList(new SelectItem<>(new Column(dataPermission.deptId())))); select.setFromItem(new Table(dataPermission.roleDeptTableAlias())); EqualsTo equalsTo = new EqualsTo(); equalsTo.setLeftExpression(new Column(dataPermission.roleId())); - equalsTo.setRightExpression(new LongValue(roleContext.getRoleId())); + equalsTo.setRightExpression(new LongValue(roleData.getRoleId())); select.setWhere(equalsTo); subSelect.setSelect(select); // 构建父查询 diff --git a/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/autoconfigure/TenantProperties.java b/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/autoconfigure/TenantProperties.java index b6977773..1468fff0 100644 --- a/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/autoconfigure/TenantProperties.java +++ b/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/autoconfigure/TenantProperties.java @@ -52,7 +52,7 @@ public class TenantProperties { private String tenantIdHeader = "X-Tenant-Id"; /** - * 超级/默认租户 ID + * 超级/默认租户 ID(超管用户所在租户) */ private Long superTenantId = 0L;