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");

Reply via email to