This is an automated email from the ASF dual-hosted git repository.

chengzhang 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 415d27456bc Refactor DatabasePermittedAuthorityRegistryProvider 
(#29597)
415d27456bc is described below

commit 415d27456bc68cfd344da6ab1e92af25f41ed3ca
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Dec 29 19:27:58 2023 +0800

    Refactor DatabasePermittedAuthorityRegistryProvider (#29597)
---
 .../authority/constant/AuthorityConstants.java}    | 29 +++++---------------
 ...DatabasePermittedAuthorityRegistryProvider.java | 31 ++++++++++------------
 .../privilege/DatabasePermittedPrivileges.java     |  5 ++--
 ...basePermittedAuthorityRegistryProviderTest.java |  2 +-
 4 files changed, 24 insertions(+), 43 deletions(-)

diff --git 
a/kernel/authority/provider/database/src/main/java/org/apache/shardingsphere/authority/provider/database/privilege/DatabasePermittedPrivileges.java
 
b/kernel/authority/core/src/main/java/org/apache/shardingsphere/authority/constant/AuthorityConstants.java
similarity index 50%
copy from 
kernel/authority/provider/database/src/main/java/org/apache/shardingsphere/authority/provider/database/privilege/DatabasePermittedPrivileges.java
copy to 
kernel/authority/core/src/main/java/org/apache/shardingsphere/authority/constant/AuthorityConstants.java
index 1baf34565dd..e4c7c06e7e7 100644
--- 
a/kernel/authority/provider/database/src/main/java/org/apache/shardingsphere/authority/provider/database/privilege/DatabasePermittedPrivileges.java
+++ 
b/kernel/authority/core/src/main/java/org/apache/shardingsphere/authority/constant/AuthorityConstants.java
@@ -15,31 +15,16 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.authority.provider.database.privilege;
+package org.apache.shardingsphere.authority.constant;
 
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.authority.model.PrivilegeType;
-import org.apache.shardingsphere.authority.model.ShardingSpherePrivileges;
-
-import java.util.Collection;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
 
 /**
- * Database permitted privileges.
+ * Authority constants.
  */
-@RequiredArgsConstructor
-public final class DatabasePermittedPrivileges implements 
ShardingSpherePrivileges {
-    
-    private static final String KEY_SUPER = "*";
-    
-    private final Collection<String> databases;
-    
-    @Override
-    public boolean hasPrivileges(final String database) {
-        return databases.contains(KEY_SUPER) || databases.contains(database);
-    }
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class AuthorityConstants {
     
-    @Override
-    public boolean hasPrivileges(final Collection<PrivilegeType> privileges) {
-        return true;
-    }
+    public static final String SUPER_PRIVILEGE = "*";
 }
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 67dc78ab380..60ddae0e8a7 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
@@ -19,8 +19,8 @@ package org.apache.shardingsphere.authority.provider.database;
 
 import com.google.common.base.Preconditions;
 import org.apache.shardingsphere.authority.model.AuthorityRegistry;
-import 
org.apache.shardingsphere.authority.provider.database.privilege.DatabasePermittedPrivileges;
 import 
org.apache.shardingsphere.authority.provider.database.privilege.DatabasePermittedAuthorityRegistry;
+import 
org.apache.shardingsphere.authority.provider.database.privilege.DatabasePermittedPrivileges;
 import org.apache.shardingsphere.authority.spi.AuthorityRegistryProvider;
 import org.apache.shardingsphere.infra.metadata.user.Grantee;
 import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
@@ -40,30 +40,28 @@ import java.util.stream.Collectors;
  */
 public final class DatabasePermittedAuthorityRegistryProvider implements 
AuthorityRegistryProvider {
     
-    public static final String PROP_USER_DATABASE_MAPPINGS = 
"user-database-mappings";
+    public static final String USER_DATABASE_MAPPINGS_KEY = 
"user-database-mappings";
     
-    private Properties props;
+    private String userDatabaseMappings;
     
     @Override
     public void init(final Properties props) {
-        this.props = props;
-    }
-    
-    @Override
-    public AuthorityRegistry build(final Collection<ShardingSphereUser> users) 
{
-        String userDatabaseMappings = 
props.getProperty(DatabasePermittedAuthorityRegistryProvider.PROP_USER_DATABASE_MAPPINGS,
 "");
-        checkDatabases(userDatabaseMappings);
-        return new DatabasePermittedAuthorityRegistry(buildPrivileges(users, 
convertUserDatabases(userDatabaseMappings)));
+        userDatabaseMappings = 
props.getProperty(DatabasePermittedAuthorityRegistryProvider.USER_DATABASE_MAPPINGS_KEY,
 "");
+        checkUserDatabaseMappings();
     }
     
-    private void checkDatabases(final String userDatabaseMappings) {
+    private void checkUserDatabaseMappings() {
         Preconditions.checkArgument(!"".equals(userDatabaseMappings), 
"user-database-mappings configuration `%s` can not be null", 
userDatabaseMappings);
         Arrays.stream(userDatabaseMappings.split(",")).forEach(each -> 
Preconditions.checkArgument(each.contains("@") && each.contains("="),
                 "user-database-mappings configuration `%s` is invalid, the 
configuration format should be like `username@hostname=database`", each));
     }
     
-    private Map<ShardingSphereUser, DatabasePermittedPrivileges> 
buildPrivileges(final Collection<ShardingSphereUser> users,
-                                                                               
  final Map<ShardingSphereUser, Collection<String>> userDatabaseMappings) {
+    @Override
+    public AuthorityRegistry build(final Collection<ShardingSphereUser> users) 
{
+        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))));
     }
     
@@ -79,11 +77,10 @@ public final class 
DatabasePermittedAuthorityRegistryProvider implements Authori
     }
     
     private boolean checkAnyOtherHost(final Grantee grantee, final 
ShardingSphereUser user) {
-        return ("%".equals(grantee.getHostname())
-                || 
grantee.getHostname().equals(user.getGrantee().getHostname())) && 
grantee.getUsername().equals(user.getGrantee().getUsername());
+        return ("%".equals(grantee.getHostname()) || 
grantee.getHostname().equals(user.getGrantee().getHostname())) && 
grantee.getUsername().equals(user.getGrantee().getUsername());
     }
     
-    private Map<ShardingSphereUser, Collection<String>> 
convertUserDatabases(final String userDatabaseMappings) {
+    private Map<ShardingSphereUser, Collection<String>> convertUserDatabases() 
{
         String[] mappings = userDatabaseMappings.split(",");
         Map<ShardingSphereUser, Collection<String>> result = new 
HashMap<>(mappings.length, 1F);
         for (String each : mappings) {
diff --git 
a/kernel/authority/provider/database/src/main/java/org/apache/shardingsphere/authority/provider/database/privilege/DatabasePermittedPrivileges.java
 
b/kernel/authority/provider/database/src/main/java/org/apache/shardingsphere/authority/provider/database/privilege/DatabasePermittedPrivileges.java
index 1baf34565dd..99ff14766da 100644
--- 
a/kernel/authority/provider/database/src/main/java/org/apache/shardingsphere/authority/provider/database/privilege/DatabasePermittedPrivileges.java
+++ 
b/kernel/authority/provider/database/src/main/java/org/apache/shardingsphere/authority/provider/database/privilege/DatabasePermittedPrivileges.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.authority.provider.database.privilege;
 
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.authority.constant.AuthorityConstants;
 import org.apache.shardingsphere.authority.model.PrivilegeType;
 import org.apache.shardingsphere.authority.model.ShardingSpherePrivileges;
 
@@ -29,13 +30,11 @@ import java.util.Collection;
 @RequiredArgsConstructor
 public final class DatabasePermittedPrivileges implements 
ShardingSpherePrivileges {
     
-    private static final String KEY_SUPER = "*";
-    
     private final Collection<String> databases;
     
     @Override
     public boolean hasPrivileges(final String database) {
-        return databases.contains(KEY_SUPER) || databases.contains(database);
+        return databases.contains(AuthorityConstants.SUPER_PRIVILEGE) || 
databases.contains(database);
     }
     
     @Override
diff --git 
a/kernel/authority/provider/database/src/test/java/org/apache/shardingsphere/authority/provider/database/DatabasePermittedAuthorityRegistryProviderTest.java
 
b/kernel/authority/provider/database/src/test/java/org/apache/shardingsphere/authority/provider/database/DatabasePermittedAuthorityRegistryProviderTest.java
index c306d81be0d..5ee0d4267da 100644
--- 
a/kernel/authority/provider/database/src/test/java/org/apache/shardingsphere/authority/provider/database/DatabasePermittedAuthorityRegistryProviderTest.java
+++ 
b/kernel/authority/provider/database/src/test/java/org/apache/shardingsphere/authority/provider/database/DatabasePermittedAuthorityRegistryProviderTest.java
@@ -39,7 +39,7 @@ class DatabasePermittedAuthorityRegistryProviderTest {
     @Test
     void assertBuild() {
         Properties props = PropertiesBuilder.build(
-                new 
Property(DatabasePermittedAuthorityRegistryProvider.PROP_USER_DATABASE_MAPPINGS,
 "root@localhost=test, [email protected]=db_dal_admin, user1@=test, user1@=test1, 
user1@=*"));
+                new 
Property(DatabasePermittedAuthorityRegistryProvider.USER_DATABASE_MAPPINGS_KEY, 
"root@localhost=test, [email protected]=db_dal_admin, user1@=test, user1@=test1, 
user1@=*"));
         AuthorityRegistryProvider provider = 
TypedSPILoader.getService(AuthorityRegistryProvider.class, 
"DATABASE_PERMITTED", props);
         AuthorityRegistry actual = 
provider.build(Collections.singletonList(new ShardingSphereUser("user1", "", 
"127.0.0.2")));
         Optional<ShardingSpherePrivileges> privileges = 
actual.findPrivileges(new Grantee("user1", "127.0.0.2"));

Reply via email to