This is an automated email from the ASF dual-hosted git repository.
sunnianjun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 379b9cf9aa0 Unify AuthorityRegistry's impl (#29611)
379b9cf9aa0 is described below
commit 379b9cf9aa0f21d5d87cbc521d994971f0767bc5
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Jan 1 14:50:29 2024 +0800
Unify AuthorityRegistry's impl (#29611)
* Unify AuthorityRegistry's impl
* Unify AuthorityRegistry's impl
---
.../apache/shardingsphere/authority/rule/AuthorityRule.java | 2 +-
.../DatabasePermittedAuthorityRegistryProvider.java | 4 ++--
.../privilege/DatabasePermittedAuthorityRegistry.java | 11 ++++++++---
.../simple/AllPermittedAuthorityRegistryProvider.java | 4 +++-
.../simple/privilege/AllPermittedAuthorityRegistry.java | 13 +++++++++++--
.../backend/handler/ProxyBackendHandlerFactoryTest.java | 3 +++
6 files changed, 28 insertions(+), 9 deletions(-)
diff --git
a/kernel/authority/core/src/main/java/org/apache/shardingsphere/authority/rule/AuthorityRule.java
b/kernel/authority/core/src/main/java/org/apache/shardingsphere/authority/rule/AuthorityRule.java
index 9f1fdb0a82a..ded04bb9461 100644
---
a/kernel/authority/core/src/main/java/org/apache/shardingsphere/authority/rule/AuthorityRule.java
+++
b/kernel/authority/core/src/main/java/org/apache/shardingsphere/authority/rule/AuthorityRule.java
@@ -61,7 +61,7 @@ public final class AuthorityRule implements GlobalRule {
* Find user.
*
* @param grantee grantee user
- * @return user
+ * @return found user
*/
public Optional<ShardingSphereUser> findUser(final Grantee grantee) {
return configuration.getUsers().stream().filter(each ->
each.getGrantee().equals(grantee)).findFirst();
diff --git
a/kernel/authority/provider/database/src/main/java/org/apache/shardingsphere/authority/provider/database/DatabasePermittedAuthorityRegistryProvider.java
b/kernel/authority/provider/database/src/main/java/org/apache/shardingsphere/authority/provider/database/DatabasePermittedAuthorityRegistryProvider.java
index ea20a82baa5..c631d4be6ef 100644
---
a/kernel/authority/provider/database/src/main/java/org/apache/shardingsphere/authority/provider/database/DatabasePermittedAuthorityRegistryProvider.java
+++
b/kernel/authority/provider/database/src/main/java/org/apache/shardingsphere/authority/provider/database/DatabasePermittedAuthorityRegistryProvider.java
@@ -61,8 +61,8 @@ public final class DatabasePermittedAuthorityRegistryProvider
implements Authori
return new DatabasePermittedAuthorityRegistry(buildPrivileges(users,
convertUserDatabases()));
}
- private Map<ShardingSphereUser, DatabasePermittedPrivileges>
buildPrivileges(final Collection<ShardingSphereUser> users, final
Map<ShardingSphereUser, Collection<String>> userDatabaseMappings) {
- return users.stream().collect(Collectors.toMap(each -> each, each ->
new DatabasePermittedPrivileges(getUserDatabases(each, userDatabaseMappings))));
+ private Map<Grantee, DatabasePermittedPrivileges> buildPrivileges(final
Collection<ShardingSphereUser> users, final Map<ShardingSphereUser,
Collection<String>> userDatabaseMappings) {
+ return
users.stream().collect(Collectors.toMap(ShardingSphereUser::getGrantee, each ->
new DatabasePermittedPrivileges(getUserDatabases(each, userDatabaseMappings))));
}
private Collection<String> getUserDatabases(final ShardingSphereUser user,
final Map<ShardingSphereUser, Collection<String>> userDatabaseMappings) {
diff --git
a/kernel/authority/provider/database/src/main/java/org/apache/shardingsphere/authority/provider/database/privilege/DatabasePermittedAuthorityRegistry.java
b/kernel/authority/provider/database/src/main/java/org/apache/shardingsphere/authority/provider/database/privilege/DatabasePermittedAuthorityRegistry.java
index c202894d38e..1fd70e12a9c 100644
---
a/kernel/authority/provider/database/src/main/java/org/apache/shardingsphere/authority/provider/database/privilege/DatabasePermittedAuthorityRegistry.java
+++
b/kernel/authority/provider/database/src/main/java/org/apache/shardingsphere/authority/provider/database/privilege/DatabasePermittedAuthorityRegistry.java
@@ -21,9 +21,9 @@ import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.authority.model.AuthorityRegistry;
import org.apache.shardingsphere.authority.model.ShardingSpherePrivileges;
import org.apache.shardingsphere.infra.metadata.user.Grantee;
-import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Optional;
/**
@@ -32,10 +32,15 @@ import java.util.Optional;
@RequiredArgsConstructor
public final class DatabasePermittedAuthorityRegistry implements
AuthorityRegistry {
- private final Map<ShardingSphereUser, DatabasePermittedPrivileges>
userPrivileges;
+ private final Map<Grantee, DatabasePermittedPrivileges> granteePrivileges;
@Override
public Optional<ShardingSpherePrivileges> findPrivileges(final Grantee
grantee) {
- return userPrivileges.keySet().stream().filter(each ->
each.getGrantee().equals(grantee)).findFirst().map(userPrivileges::get);
+ for (Entry<Grantee, DatabasePermittedPrivileges> entry :
granteePrivileges.entrySet()) {
+ if (entry.getKey().equals(grantee)) {
+ return Optional.of(entry.getValue());
+ }
+ }
+ return Optional.empty();
}
}
diff --git
a/kernel/authority/provider/simple/src/main/java/org/apache/shardingsphere/authority/provider/simple/AllPermittedAuthorityRegistryProvider.java
b/kernel/authority/provider/simple/src/main/java/org/apache/shardingsphere/authority/provider/simple/AllPermittedAuthorityRegistryProvider.java
index 68a7f4c2308..5779d551e0c 100644
---
a/kernel/authority/provider/simple/src/main/java/org/apache/shardingsphere/authority/provider/simple/AllPermittedAuthorityRegistryProvider.java
+++
b/kernel/authority/provider/simple/src/main/java/org/apache/shardingsphere/authority/provider/simple/AllPermittedAuthorityRegistryProvider.java
@@ -19,11 +19,13 @@ package org.apache.shardingsphere.authority.provider.simple;
import org.apache.shardingsphere.authority.model.AuthorityRegistry;
import
org.apache.shardingsphere.authority.provider.simple.privilege.AllPermittedAuthorityRegistry;
+import
org.apache.shardingsphere.authority.provider.simple.privilege.AllPermittedPrivileges;
import org.apache.shardingsphere.authority.spi.AuthorityRegistryProvider;
import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
import java.util.Collection;
import java.util.Collections;
+import java.util.stream.Collectors;
/**
* All permitted authority registry provider.
@@ -32,7 +34,7 @@ public final class AllPermittedAuthorityRegistryProvider
implements AuthorityReg
@Override
public AuthorityRegistry build(final Collection<ShardingSphereUser> users)
{
- return new AllPermittedAuthorityRegistry();
+ return new
AllPermittedAuthorityRegistry(users.stream().collect(Collectors.toMap(ShardingSphereUser::getGrantee,
each -> new AllPermittedPrivileges())));
}
@Override
diff --git
a/kernel/authority/provider/simple/src/main/java/org/apache/shardingsphere/authority/provider/simple/privilege/AllPermittedAuthorityRegistry.java
b/kernel/authority/provider/simple/src/main/java/org/apache/shardingsphere/authority/provider/simple/privilege/AllPermittedAuthorityRegistry.java
index 7fd9b51c42a..8ee54ce00ba 100644
---
a/kernel/authority/provider/simple/src/main/java/org/apache/shardingsphere/authority/provider/simple/privilege/AllPermittedAuthorityRegistry.java
+++
b/kernel/authority/provider/simple/src/main/java/org/apache/shardingsphere/authority/provider/simple/privilege/AllPermittedAuthorityRegistry.java
@@ -17,21 +17,30 @@
package org.apache.shardingsphere.authority.provider.simple.privilege;
+import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.authority.model.AuthorityRegistry;
import org.apache.shardingsphere.authority.model.ShardingSpherePrivileges;
import org.apache.shardingsphere.infra.metadata.user.Grantee;
+import java.util.Map;
+import java.util.Map.Entry;
import java.util.Optional;
/**
* All permitted authority registry.
*/
+@RequiredArgsConstructor
public final class AllPermittedAuthorityRegistry implements AuthorityRegistry {
- private static final ShardingSpherePrivileges INSTANCE = new
AllPermittedPrivileges();
+ private final Map<Grantee, AllPermittedPrivileges> granteePrivileges;
@Override
public Optional<ShardingSpherePrivileges> findPrivileges(final Grantee
grantee) {
- return Optional.of(INSTANCE);
+ for (Entry<Grantee, AllPermittedPrivileges> entry :
granteePrivileges.entrySet()) {
+ if (entry.getKey().equals(grantee)) {
+ return Optional.of(entry.getValue());
+ }
+ }
+ return Optional.empty();
}
}
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactoryTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactoryTest.java
index 7c6ec5cfc32..6aa6e2eb69c 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactoryTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactoryTest.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.proxy.backend.handler;
import org.apache.shardingsphere.authority.rule.AuthorityRule;
import
org.apache.shardingsphere.authority.rule.builder.DefaultAuthorityRuleConfigurationBuilder;
+import org.apache.shardingsphere.authority.rule.builder.DefaultUser;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
@@ -26,6 +27,7 @@ import
org.apache.shardingsphere.infra.exception.core.external.sql.type.generic.
import org.apache.shardingsphere.infra.hint.HintValueContext;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
+import org.apache.shardingsphere.infra.metadata.user.Grantee;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.infra.state.cluster.ClusterState;
import org.apache.shardingsphere.mode.manager.ContextManager;
@@ -90,6 +92,7 @@ class ProxyBackendHandlerFactoryTest {
@BeforeEach
void setUp() {
+ when(connectionSession.getGrantee()).thenReturn(new
Grantee(DefaultUser.USERNAME, "%"));
when(connectionSession.getTransactionStatus().getTransactionType()).thenReturn(TransactionType.LOCAL);
when(connectionSession.getDefaultDatabaseName()).thenReturn("db");
when(connectionSession.getDatabaseName()).thenReturn("db");