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