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 <[email protected]>
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);
}
}