minor, refine  generateAceResponses.

Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/f15da9e6
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/f15da9e6
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/f15da9e6

Branch: refs/heads/master
Commit: f15da9e6ca64232ecb6153396b4bb2656c36fbc8
Parents: 3a3d11a
Author: tttMelody <245915...@qq.com>
Authored: Tue Dec 12 20:42:20 2017 +0800
Committer: Jiatao Tao <245915...@qq.com>
Committed: Thu Dec 14 19:07:28 2017 +0800

----------------------------------------------------------------------
 .../kylin/rest/service/AccessService.java       | 44 +++++++++++++++++++-
 1 file changed, 43 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/f15da9e6/server-base/src/main/java/org/apache/kylin/rest/service/AccessService.java
----------------------------------------------------------------------
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/service/AccessService.java 
b/server-base/src/main/java/org/apache/kylin/rest/service/AccessService.java
index 3b3b1df..3732c15 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/service/AccessService.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/service/AccessService.java
@@ -25,6 +25,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.persistence.AclEntity;
 import org.apache.kylin.common.persistence.RootPersistentEntity;
@@ -314,19 +315,60 @@ public class AccessService {
         }
     }
 
-    public List<AccessEntryResponse> generateAceResponses(Acl acl) {
+    public List<AccessEntryResponse> generateAceResponsesByFuzzMatching(Acl 
acl, String nameSeg, boolean isCaseSensitive) {
         if (null == acl) {
             return Collections.emptyList();
         }
 
         List<AccessEntryResponse> result = new 
ArrayList<AccessEntryResponse>();
         for (AccessControlEntry ace : acl.getEntries()) {
+            if (nameSeg != null && !needAdd(nameSeg, isCaseSensitive, 
getName(ace.getSid()))) {
+                continue;
+            }
             result.add(new AccessEntryResponse(ace.getId(), ace.getSid(), 
ace.getPermission(), ace.isGranting()));
         }
 
         return result;
     }
 
+    private boolean needAdd(String nameSeg, boolean isCaseSensitive, String 
name) {
+        return isCaseSensitive && StringUtils.contains(name, nameSeg)
+                || !isCaseSensitive && StringUtils.containsIgnoreCase(name, 
nameSeg);
+    }
+
+    private static String getName(Sid sid) {
+        if (sid instanceof PrincipalSid) {
+            return ((PrincipalSid) sid).getPrincipal();
+        } else {
+            return ((GrantedAuthoritySid) sid).getGrantedAuthority();
+        }
+    }
+
+    public List<AccessEntryResponse> generateAceResponses(Acl acl) {
+        return generateAceResponsesByFuzzMatching(acl, null, false);
+    }
+
+    public List<String> getAllAclSids(Acl acl, String type) {
+        if (null == acl) {
+            return Collections.emptyList();
+        }
+
+        List<String> result = new ArrayList<>();
+        for (AccessControlEntry ace : acl.getEntries()) {
+            String name = null;
+            if (type.equalsIgnoreCase("user") && ace.getSid() instanceof 
PrincipalSid) {
+                name = ((PrincipalSid) ace.getSid()).getPrincipal();
+            }
+            if (type.equalsIgnoreCase("group") && ace.getSid() instanceof 
GrantedAuthoritySid) {
+                name = ((GrantedAuthoritySid) 
ace.getSid()).getGrantedAuthority();
+            }
+            if (!StringUtils.isBlank(name)) {
+                result.add(name);
+            }
+        }
+        return result;
+    }
+
     /**
      * Protect admin permission granted to acl owner.
      *

Reply via email to