You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@kylin.apache.org by "Pan, Julian (JIRA)" <ji...@apache.org> on 2017/10/25 03:00:00 UTC

[jira] [Commented] (KYLIN-2964) AclEntity operation issue

    [ https://issues.apache.org/jira/browse/KYLIN-2964?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16218019#comment-16218019 ] 

Pan, Julian commented on KYLIN-2964:
------------------------------------

LM-SHC-16501335:dist liapan$ git diff 
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 ae7ac6e..5255acf 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
@@ -126,6 +126,7 @@ public class AccessService {
             acl.insertAce(acl.getEntries().size(), permission, sid, true);
         }
 
+        aclService.checkUserName(acl);
         acl = aclService.updateAcl(acl);
 
         return acl;
@@ -160,6 +161,7 @@ public class AccessService {
 
             try {
                 acl.updateAce(indexOfAce, newPermission);
+                aclService.checkUserName(acl);
                 acl = aclService.updateAcl(acl);
             } catch (NotFoundException e) {
                 //do nothing?
@@ -238,6 +240,7 @@ public class AccessService {
 
         acl.setEntriesInheriting(true);
         acl.setParent(parentAcl);
+        aclService.checkUserName(acl);
         aclService.updateAcl(acl);
     }
 
diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/AclService.java b/server-base/src/main/java/org/apache/kylin/rest/service/AclService.java
index d4a9614..a9110fe 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/service/AclService.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/service/AclService.java
index d4a9614..a9110fe 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/service/AclService.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/service/AclService.java
@@ -261,7 +261,6 @@ public class AclService implements MutableAclService {
 
     @Override
     public MutableAcl updateAcl(MutableAcl mutableAcl) throws NotFoundException {
-        Message msg = MsgPicker.getMsg();
         try {
             readAclById(mutableAcl.getObjectIdentity(), null, false);
         } catch (NotFoundException e) {
@@ -281,12 +280,6 @@ public class AclService implements MutableAclService {
             Map<String, AceInfo> allAceInfo = record.getAllAceInfo();
             allAceInfo.clear();
             for (AccessControlEntry ace : mutableAcl.getEntries()) {
-                if (ace.getSid() instanceof PrincipalSid) {
-                    PrincipalSid psid = (PrincipalSid) ace.getSid();
-                    String userName = psid.getPrincipal();
-                    if (!userService.userExists(userName))
-                        throw new BadRequestException(String.format(msg.getUSER_NOT_EXIST(), userName));
-                }
                 AceInfo aceInfo = new AceInfo(ace);
                 allAceInfo.put(String.valueOf(aceInfo.getSidInfo().getSid()), aceInfo);
             }
@@ -351,4 +344,15 @@ public class AclService implements MutableAclService {
     public static String getQueryKeyById(String id) {
         return DIR_PREFIX + id;
     }
+
+    protected void checkUserName(MutableAcl mutableAcl) {
+        for (AccessControlEntry ace : mutableAcl.getEntries()) {
+            if (ace.getSid() instanceof PrincipalSid) {
+                PrincipalSid psid = (PrincipalSid) ace.getSid();
+                String userName = psid.getPrincipal();
+                if (!userService.userExists(userName))
+                    throw new BadRequestException(String.format(MsgPicker.getMsg().getUSER_NOT_EXIST(), userName));
+            }
+        }
+    }
 }
\ No newline at end of file


> AclEntity operation issue 
> --------------------------
>
>                 Key: KYLIN-2964
>                 URL: https://issues.apache.org/jira/browse/KYLIN-2964
>             Project: Kylin
>          Issue Type: Bug
>          Components: REST Service
>    Affects Versions: v2.1.0
>            Reporter: Pan, Julian
>            Assignee: Zhong,Jason
>
> When user add/update/delete access for AclEntity (project, model, cube, job), which will check user exist. But if there are two user not exist, which will cause issue. Admin want to delete the notExistsUser1, it will throws notExistsUser2 not exist. The other operation has same issues for this check. Could we add another method for checkExistUser and just add the method for add or update? It should be fix this issue.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)