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

zhangliang 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 e22d7effb4c Add accept method to Grantee (#29612)
e22d7effb4c is described below

commit e22d7effb4cac9a830c2258be4af85e8f000d0d8
Author: Raigor <raigor.ji...@gmail.com>
AuthorDate: Mon Jan 1 15:12:14 2024 +0800

    Add accept method to Grantee (#29612)
    
    * Add accept method to Grantee
    
    * Refactor AllPermittedAuthorityRegistry
---
 .../apache/shardingsphere/infra/metadata/user/Grantee.java | 14 ++++++++++++--
 .../shardingsphere/infra/metadata/user/GranteeTest.java    |  9 ++++++++-
 .../shardingsphere/authority/rule/AuthorityRule.java       |  2 +-
 .../privilege/DatabasePermittedAuthorityRegistry.java      |  8 +-------
 .../simple/privilege/AllPermittedAuthorityRegistry.java    |  8 +-------
 5 files changed, 23 insertions(+), 18 deletions(-)

diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/user/Grantee.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/user/Grantee.java
index f9fca35dfdb..e939e5816d0 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/user/Grantee.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/user/Grantee.java
@@ -42,7 +42,7 @@ public final class Grantee {
         this.username = username;
         this.hostname = Strings.isNullOrEmpty(hostname) ? "%" : hostname;
         isUnlimitedHost = "%".equals(this.hostname);
-        hashCode = isUnlimitedHost ? username.toUpperCase().hashCode() : 
Objects.hashCode(username.toUpperCase(), hostname.toUpperCase());
+        hashCode = Objects.hashCode(username.toUpperCase(), 
this.hostname.toUpperCase());
         toString = username + "@" + hostname;
     }
     
@@ -50,11 +50,21 @@ public final class Grantee {
     public boolean equals(final Object obj) {
         if (obj instanceof Grantee) {
             Grantee grantee = (Grantee) obj;
-            return grantee.username.equalsIgnoreCase(username) && 
isPermittedHost(grantee);
+            return grantee.username.equalsIgnoreCase(username) && 
grantee.hostname.equalsIgnoreCase(hostname);
         }
         return false;
     }
     
+    /**
+     * Check if the grantee is acceptable.
+     *
+     * @param grantee grantee
+     * @return if the grantee is acceptable
+     */
+    public boolean accept(final Grantee grantee) {
+        return grantee.username.equalsIgnoreCase(username) && 
isPermittedHost(grantee);
+    }
+    
     private boolean isPermittedHost(final Grantee grantee) {
         return isUnlimitedHost || grantee.hostname.equalsIgnoreCase(hostname);
     }
diff --git 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/user/GranteeTest.java
 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/user/GranteeTest.java
index 63206e13164..b79c7f5ee19 100644
--- 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/user/GranteeTest.java
+++ 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/user/GranteeTest.java
@@ -22,6 +22,7 @@ import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 class GranteeTest {
     
@@ -40,7 +41,6 @@ class GranteeTest {
     void assertEquals() {
         Grantee grantee = new Grantee("name", "%");
         assertThat(grantee, is(new Grantee("name", "")));
-        assertThat(grantee, is(new Grantee("name", "127.0.0.1")));
     }
     
     @Test
@@ -64,4 +64,11 @@ class GranteeTest {
         assertThat(new Grantee("name", "%").toString(), is("name@%"));
         assertThat(new Grantee("name", "").toString(), is("name@"));
     }
+    
+    @Test
+    void assertAccept() {
+        Grantee grantee = new Grantee("name", "%");
+        assertTrue(grantee.accept(new Grantee("name", "")));
+        assertTrue(grantee.accept(new Grantee("name", "127.0.0.1")));
+    }
 }
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 ded04bb9461..56e0ddd1747 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
@@ -64,7 +64,7 @@ public final class AuthorityRule implements GlobalRule {
      * @return found user
      */
     public Optional<ShardingSphereUser> findUser(final Grantee grantee) {
-        return configuration.getUsers().stream().filter(each -> 
each.getGrantee().equals(grantee)).findFirst();
+        return configuration.getUsers().stream().filter(each -> 
each.getGrantee().accept(grantee)).findFirst();
     }
     
     /**
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 1fd70e12a9c..fb6df079c9f 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
@@ -23,7 +23,6 @@ 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;
 
 /**
@@ -36,11 +35,6 @@ public final class DatabasePermittedAuthorityRegistry 
implements AuthorityRegist
     
     @Override
     public Optional<ShardingSpherePrivileges> findPrivileges(final Grantee 
grantee) {
-        for (Entry<Grantee, DatabasePermittedPrivileges> entry : 
granteePrivileges.entrySet()) {
-            if (entry.getKey().equals(grantee)) {
-                return Optional.of(entry.getValue());
-            }
-        }
-        return Optional.empty();
+        return granteePrivileges.keySet().stream().filter(each -> 
each.accept(grantee)).findFirst().map(granteePrivileges::get);
     }
 }
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 8ee54ce00ba..30c34b630e0 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
@@ -23,7 +23,6 @@ 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;
 
 /**
@@ -36,11 +35,6 @@ public final class AllPermittedAuthorityRegistry implements 
AuthorityRegistry {
     
     @Override
     public Optional<ShardingSpherePrivileges> findPrivileges(final Grantee 
grantee) {
-        for (Entry<Grantee, AllPermittedPrivileges> entry : 
granteePrivileges.entrySet()) {
-            if (entry.getKey().equals(grantee)) {
-                return Optional.of(entry.getValue());
-            }
-        }
-        return Optional.empty();
+        return granteePrivileges.keySet().stream().filter(each -> 
each.accept(grantee)).findFirst().map(granteePrivileges::get);
     }
 }

Reply via email to