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