Anjan created SLING-3010:
----------------------------

             Summary: Managing Permissions using Sling with Aggregate Privileges
                 Key: SLING-3010
                 URL: https://issues.apache.org/jira/browse/SLING-3010
             Project: Sling
          Issue Type: Bug
          Components: API
    Affects Versions: JCR Base 2.1.2
            Reporter: Anjan
            Priority: Minor


I am using Sling's REST interface to modify the permissions on a Node.  I 
noticed an issue.

The issue I am facing can be best explained by showing the curl commands I 
executed and the output I received:

(1) Here is the initial set of privileges present on the node:
$ curl -u admin:admin http://localhost:8080/content/pertest.eacl.json
{"test":{"principal":"test","denied":["jcr:versionManagement","jcr:read","jcr:modifyAccessControl","rep:write"],"order":0},"everyone":{"principal":"everyone","granted":["jcr:read","jcr:readAccessControl"],"order":1},"administrators":{"principal":"administrators","granted":["jcr:all"],"order":2}}

(2) Run the below command to grant all the privileges for "test" principal
$ curl -u admin:admin -FprincipalId=test 
-Fprivilege@jcr:versionManagement=granted -Fprivilege@jcr:read=granted 
-Fprivilege@jcr:modifyAccessControl=granted 
-Fprivilege@jcr:nodeTypeManagement=granted  -Fprivilege@jcr:write=granted 
http://localhost:8080/content/pertest.modifyAce.json

(3) As you can see from the below output, "jcr:write" is still present under 
"denied" privileges for "test" even though I granted all the privileges in the 
previous command
$ curl -u admin:admin http://localhost:8080/content/pertest.eacl.json
{"test":{"principal":"test","granted":["jcr:nodeTypeManagement","jcr:versionManagement","jcr:read","jcr:modifyAccessControl"],"denied":["jcr:write"],"order":0},"everyone":{"principal":"everyone","granted":["jcr:read","jcr:readAccessControl"],"order":1},"administrators":{"principal":"administrators","granted":["jcr:all"],"order":2}}

Initially I thought it's a bug in Jackrabbit, but after getting the 
clarification from Jackrabbit forum, I think it might need to be corrected in 
Sling.

Here is the link to the question I raised in Jackrabbit forum:

http://jackrabbit.510166.n4.nabble.com/Bug-or-intended-behavior-getAggregatePrivileges-td4659272.html

Potential fix:

In the class org.apache.sling.jcr.base.util.AccessControlUtil.java, there is a 
private method with the below signature:

private static Set<String> disaggregateToPrivilegeNames(Privilege privilege) {}

Inside this method, there is a "for" loop

for (Privilege disaggregate : privileges) {
        disaggregatedPrivilegeNames.add(disaggregate.getName());
}

If I modify the above snippet with the below code snippet, then the issue seems 
to be resolved.

for (Privilege disaggregate : privileges) {
        if(!disaggregate.isAggregate())
             disaggregatedPrivilegeNames.add(disaggregate.getName());
}

Based on my initial testing the change seems to be working fine.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to