Hi,


I'm playing around with the Sling Oak restriction feature and I can't seem to 
get it working.



The simple case I'm trying right now is to allow a user 'alice' to have full 
access to all nodes at or below nodes with Sling resource type 'foo'.  Here's 
the test procedure I'm following:



1.) Fire up sling-starter 11 and log into the Composum browser as admin.

2.) Add a user 'alice'.

3.) Add permission jcr:read to '/' for alice so she can browse in Composum.

4.) Create a sling:Folder node '/content/data' with Sling resource type 'foo'.

5.) Create a sling:Folder node '/content/data/child1' with Sling resource type 
'foo'.

6.) For the '/content/data' node, add a permission with principal 'alice', rule 
'allow', privileges 'jcr:all', and restrictions 
'sling:resourceTypesWithDescendants=foo'.

7.) In a separate browser, log in as alice and go to Composum.

8.) As alice, try to create the node '/content/data/child2'.



Expected: User 'alice' can create the node.

Actual: The Composum "Create New Node" dialog displays the error "Error 400 
javax.jcr.AccessDeniedException: OakAccess0000: Access denied" and the node is 
not created.



If I check effective permissions in Composum for /content/data and 
/content/data/child1, I see that 'alice' does receive jcr:all for both nodes.  
Further, I can perform this check either as admin or alice, whereas I cannot 
look at permissions on /content as alice.



If I try the Sling POST servlet as alice to create the node, I get a different 
exception "org.apache.sling.api.resource.PersistenceException: Resource at 
'/content/data/foo' is not modifiable."



Am I misunderstanding something about how restrictions work?  Thank you for any 
guidance you can offer!



John



The stack trace for the failure when creating via Composum is:



Caused by: org.apache.jackrabbit.oak.api.CommitFailedException: OakAccess0000: 
Access denied

        at 
org.apache.jackrabbit.oak.security.authorization.permission.PermissionValidator.checkPermissions(PermissionValidator.java:210)
 [org.apache.jackrabbit.oak-core:1.8.8]

        at 
org.apache.jackrabbit.oak.security.authorization.permission.PermissionValidator.childNodeAdded(PermissionValidator.java:148)
 [org.apache.jackrabbit.oak-core:1.8.8]

        at 
org.apache.jackrabbit.oak.spi.commit.VisibleValidator.childNodeAdded(VisibleValidator.java:106)
 [org.apache.jackrabbit.oak-store-spi:1.8.8]

        at 
org.apache.jackrabbit.oak.spi.commit.VisibleValidator.childNodeAdded(VisibleValidator.java:32)
 [org.apache.jackrabbit.oak-store-spi:1.8.8]



The stack trace for Sling POST is:



org.apache.sling.api.resource.PersistenceException: Resource at 
'/content/data/child2' is not modifiable.

        at 
org.apache.sling.servlets.post.impl.helper.SlingPropertyValueHandler.setProperty(SlingPropertyValueHandler.java:114)

        at 
org.apache.sling.servlets.post.impl.operations.ModifyOperation.writeContent(ModifyOperation.java:372)
 [org.apache.sling.servlets.post:2.3.26]

        at 
org.apache.sling.servlets.post.impl.operations.ModifyOperation.doRun(ModifyOperation.java:93)
 [org.apache.sling.servlets.post:2.3.26]

        at 
org.apache.sling.servlets.post.impl.operations.AbstractPostOperation.run(AbstractPostOperation.java:99)
 [org.apache.sling.servlets.post:2.3.26]

        at 
org.apache.sling.servlets.post.impl.SlingPostServlet.doPost(SlingPostServlet.java:228)
 [org.apache.sling.servlets.post:2.3.26]

Reply via email to