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. *