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

menghaoran 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 3870e98  Create DataPrivilege and refactor ShardingSpherePrivilege 
(#9293)
3870e98 is described below

commit 3870e98a6d8033b1352a98af01d4ddeda27b37bc
Author: Juan Pan(Trista) <[email protected]>
AuthorDate: Wed Feb 3 16:21:36 2021 +0800

    Create DataPrivilege and refactor ShardingSpherePrivilege (#9293)
---
 ...Privilege.java => AdministrationPrivilege.java} | 17 ++++--
 .../auth/privilege/ShardingSpherePrivilege.java    | 12 ++--
 .../infra/auth/privilege/data/DataPrivilege.java   | 64 ++++++++++++++++++++++
 .../auth/privilege/{ => data}/SchemaPrivilege.java | 27 ++++++---
 .../auth/privilege/{ => data}/TablePrivilege.java  |  3 +-
 5 files changed, 100 insertions(+), 23 deletions(-)

diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/auth/privilege/InstancePrivilege.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/auth/privilege/AdministrationPrivilege.java
similarity index 80%
rename from 
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/auth/privilege/InstancePrivilege.java
rename to 
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/auth/privilege/AdministrationPrivilege.java
index 90d3b7b..29ddd60 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/auth/privilege/InstancePrivilege.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/auth/privilege/AdministrationPrivilege.java
@@ -23,10 +23,10 @@ import java.util.Collection;
 import java.util.LinkedHashSet;
 
 /**
- * Instance privilege.
+ * Administration privilege.
  */
 @Getter
-public final class InstancePrivilege {
+public final class AdministrationPrivilege {
     
     private final Collection<PrivilegeType> privileges = new LinkedHashSet<>();
     
@@ -37,9 +37,14 @@ public final class InstancePrivilege {
      * @return has privileges or not
      */
     public boolean hasPrivileges(final Collection<PrivilegeType> privileges) {
-        if (this.privileges.contains(PrivilegeType.ALL)) {
-            return true;
-        }
-        return this.privileges.containsAll(privileges);
+        return this.privileges.contains(PrivilegeType.ALL) || 
this.privileges.containsAll(privileges);
+    }
+    
+    /**
+     * Set super privilege.
+     *
+     */
+    public void setSuper() {
+        privileges.add(PrivilegeType.ALL);
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/auth/privilege/ShardingSpherePrivilege.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/auth/privilege/ShardingSpherePrivilege.java
index dc25424..af4ee8c 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/auth/privilege/ShardingSpherePrivilege.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/auth/privilege/ShardingSpherePrivilege.java
@@ -18,8 +18,7 @@
 package org.apache.shardingsphere.infra.auth.privilege;
 
 import lombok.Getter;
-
-import java.util.Collections;
+import org.apache.shardingsphere.infra.auth.privilege.data.DataPrivilege;
 
 /**
  * ShardingSphere privilege.
@@ -27,17 +26,16 @@ import java.util.Collections;
 @Getter
 public final class ShardingSpherePrivilege {
     
-    private final InstancePrivilege instancePrivilege = new 
InstancePrivilege();
+    private final AdministrationPrivilege administrationPrivilege = new 
AdministrationPrivilege();
     
-    private final SchemaPrivilege schemaPrivilege = new SchemaPrivilege();
+    private final DataPrivilege dataPrivilege = new DataPrivilege();
     
     /**
      * Set super privilege.
      *
      */
     public void setSuper() {
-        instancePrivilege.getPrivileges().add(PrivilegeType.ALL);
-        schemaPrivilege.getTablePrivileges().put(PrivilegeType.ALL.getName(),
-                new TablePrivilege(PrivilegeType.ALL.getName(), 
Collections.singletonList(PrivilegeType.ALL)));
+        administrationPrivilege.setSuper();
+        dataPrivilege.setSuper();
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/auth/privilege/data/DataPrivilege.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/auth/privilege/data/DataPrivilege.java
new file mode 100644
index 0000000..3ccc5b8
--- /dev/null
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/auth/privilege/data/DataPrivilege.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.infra.auth.privilege.data;
+
+import lombok.Getter;
+import org.apache.shardingsphere.infra.auth.privilege.PrivilegeType;
+
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * Data privilege.
+ */
+@Getter
+public final class DataPrivilege {
+    
+    private final Collection<PrivilegeType> globalPrivileges = new 
LinkedHashSet<>();
+    
+    private final Map<String, SchemaPrivilege> specificPrivileges = new 
LinkedHashMap<>();
+    
+    /**
+     * Has privileges.
+     *
+     * @param schema schema
+     * @param table table
+     * @param privileges privileges
+     * @return has privileges or not
+     */
+    public boolean hasPrivileges(final String schema, final String table, 
final Collection<PrivilegeType> privileges) {
+        return globalPrivileges.contains(PrivilegeType.ALL) || 
globalPrivileges.containsAll(privileges)
+                || hasPrivileges0(schema, table, privileges);
+    }
+    
+    private boolean hasPrivileges0(final String schema, final String table, 
final Collection<PrivilegeType> privileges) {
+        Collection<PrivilegeType> targets = privileges.stream().filter(each -> 
!globalPrivileges.contains(each)).collect(Collectors.toList());
+        return specificPrivileges.containsKey(schema) && 
specificPrivileges.get(schema).hasPrivileges(table, targets);
+    }
+    
+    /**
+     * Set super privilege.
+     *
+     */
+    public void setSuper() {
+        globalPrivileges.add(PrivilegeType.ALL);
+    }
+}
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/auth/privilege/SchemaPrivilege.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/auth/privilege/data/SchemaPrivilege.java
similarity index 55%
rename from 
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/auth/privilege/SchemaPrivilege.java
rename to 
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/auth/privilege/data/SchemaPrivilege.java
index 6e1db40..3082e77 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/auth/privilege/SchemaPrivilege.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/auth/privilege/data/SchemaPrivilege.java
@@ -15,21 +15,30 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.infra.auth.privilege;
+package org.apache.shardingsphere.infra.auth.privilege.data;
 
 import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.infra.auth.privilege.PrivilegeType;
 
 import java.util.Collection;
 import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * Schema privilege.
  */
+@RequiredArgsConstructor
 @Getter
 public final class SchemaPrivilege {
     
-    private final Map<String, TablePrivilege> tablePrivileges = new 
LinkedHashMap<>();
+    private final String name;
+    
+    private final Collection<PrivilegeType> globalPrivileges = new 
LinkedHashSet<>();
+    
+    private final Map<String, TablePrivilege> specificPrivileges = new 
LinkedHashMap<>();
     
     /**
      * Has privileges.
@@ -39,12 +48,12 @@ public final class SchemaPrivilege {
      * @return has privileges or not
      */
     public boolean hasPrivileges(final String table, final 
Collection<PrivilegeType> privileges) {
-        if (!tablePrivileges.containsKey(table)) {
-            return false;
-        }
-        if (tablePrivileges.containsKey("*")) {
-            return tablePrivileges.get("*").hasPrivileges(privileges);
-        }
-        return tablePrivileges.get(table).hasPrivileges(privileges);
+        return globalPrivileges.contains(PrivilegeType.ALL) || 
globalPrivileges.containsAll(privileges)
+                || hasPrivileges0(table, privileges);
+    }
+    
+    private boolean hasPrivileges0(final String table, final 
Collection<PrivilegeType> privileges) {
+        Collection<PrivilegeType> targets = privileges.stream().filter(each -> 
!globalPrivileges.contains(each)).collect(Collectors.toList());
+        return specificPrivileges.containsKey(table) && 
specificPrivileges.get(table).hasPrivileges(targets);
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/auth/privilege/TablePrivilege.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/auth/privilege/data/TablePrivilege.java
similarity index 91%
rename from 
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/auth/privilege/TablePrivilege.java
rename to 
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/auth/privilege/data/TablePrivilege.java
index af8c56c..5042722 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/auth/privilege/TablePrivilege.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/auth/privilege/data/TablePrivilege.java
@@ -15,10 +15,11 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.infra.auth.privilege;
+package org.apache.shardingsphere.infra.auth.privilege.data;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.infra.auth.privilege.PrivilegeType;
 
 import java.util.Collection;
 

Reply via email to