[ 
https://issues.apache.org/jira/browse/SLING-5768?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Georg Henzler updated SLING-5768:
---------------------------------
    Description: 
Oak allows to extend its permissions management by using custom restrictions 
\[1], also the standard oak restrictions are based on this and are implemented 
in a fairly straight-forward way \[2] (example is for rep:ntNames). 

It would be nice to have sling level restrictions using sling properties in 
general. This issue is about introducing a restriction on resource types - the 
following should be possible:

{code}
- /content/mynode 
   - rep:policy (rep:ACL)
     - allow (rep:GrantACE)
       + principalName (String) = "myAuthorizable"
       + rep:privileges (Name[]) = "rep:write"
       - rep:restrictions (rep:Restrictions)
          +     sling:resourceTypes (String[]) = 
[myproj/resourcetype1,myproj/resourcetype2]
{code}

The example would only grant "rep:write" for the resource types 
myproj/resourcetype1 and myproj/resourcetype2 in path /content/mynode, other 
resources under path /content/mynode would not have "rep:write" permissions. 

Additionally to strict resource type matching it shall be possible to 
automatically match a resource with a given resource type including all 
children. Also, not all content nodes have a resource type, therefore it should 
be possible to match against a child node by appending \@path to the resource 
type: 
{code}
- /content/myprj 
   - rep:policy (rep:ACL)
     - allow (rep:GrantACE)
       + principalName (String) = "myAuthorizable"
       + rep:privileges (Name[]) = "rep:write"
       - rep:restrictions (rep:Restrictions)
          +     sling:resourceTypesWithChildren (String[]) = 
[myproj/resourcetype1@jcr:content]
{code}
To achieve this any path match attempt traverses the parents and checks for a 
match (but only up to the base path, /content/myprj in this example). For AEM 
use cases, this can match a whole page structure (e.g. something like 
/content/myprj/path/to/newsoverview, the whole news section can be easily 
matched by having a distinct news overview template). 

\[1]
https://jackrabbit.apache.org/oak/docs/security/authorization/restriction.html#Pluggability

\[2]
https://github.com/apache/jackrabbit-oak/blob/cea167f5bf70d818d58b1ffcc6bc65b3c0f9a5a4/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/NodeTypePattern.java#L50)
https://github.com/apache/jackrabbit-oak/blob/cea167f5bf70d818d58b1ffcc6bc65b3c0f9a5a4/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/RestrictionProviderImpl.java

  was:
Oak allows to extend its permissions management by using custom restrictions 
\[1], also the standard oak restrictions are based on this and are implemented 
in a fairly straight-forward way \[2] (example is for rep:ntNames). 

It would be nice to have sling level restrictions using sling properties in 
general. This issue is about introducing a restriction on resource types - the 
following should be possible:

{code}
- /content/mynode 
   - rep:policy (rep:ACL)
     - allow (rep:GrantACE)
       + principalName (String) = "myAuthorizable"
       + rep:privileges (Name[]) = "rep:write"
       - rep:restrictions (rep:Restrictions)
          +     rep:resourceTypes (String[]) = 
[myproj/resourcetype1,myproj/resourcetype2]
{code}

The example would only grant "rep:write" for the resource types 
myproj/resourcetype1 and myproj/resourcetype2 in path /content/mynode, other 
resources under path /content/mynode would not have "rep:write" permissions. 

Additionally to strict resource type matching it shall be possible to 
automatically match a resource with a given resource type including all 
children. Also, not all content nodes have a resource type, therefore it should 
be possible to match against a child node by appending \@path to the resource 
type: 
{code}
- /content/myprj 
   - rep:policy (rep:ACL)
     - allow (rep:GrantACE)
       + principalName (String) = "myAuthorizable"
       + rep:privileges (Name[]) = "rep:write"
       - rep:restrictions (rep:Restrictions)
          +     rep:resourceTypesWithChildren (String[]) = 
[myproj/resourcetype1@jcr:content]
{code}
To achieve this any path match attempt traverses the parents and checks for a 
match (but only up to the base path, /content/myprj in this example). For AEM 
use cases, this can match a whole page structure (e.g. something like 
/content/myprj/path/to/newsoverview, the whole news section can be easily 
matched by having a distinct news overview template). 

\[1]
https://jackrabbit.apache.org/oak/docs/security/authorization/restriction.html#Pluggability

\[2]
https://github.com/apache/jackrabbit-oak/blob/cea167f5bf70d818d58b1ffcc6bc65b3c0f9a5a4/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/NodeTypePattern.java#L50)
https://github.com/apache/jackrabbit-oak/blob/cea167f5bf70d818d58b1ffcc6bc65b3c0f9a5a4/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/RestrictionProviderImpl.java


> Introduce sling:resourceTypes as extension to Oak permission system
> -------------------------------------------------------------------
>
>                 Key: SLING-5768
>                 URL: https://issues.apache.org/jira/browse/SLING-5768
>             Project: Sling
>          Issue Type: New Feature
>          Components: Extensions
>            Reporter: Georg Henzler
>
> Oak allows to extend its permissions management by using custom restrictions 
> \[1], also the standard oak restrictions are based on this and are 
> implemented in a fairly straight-forward way \[2] (example is for 
> rep:ntNames). 
> It would be nice to have sling level restrictions using sling properties in 
> general. This issue is about introducing a restriction on resource types - 
> the following should be possible:
> {code}
> - /content/mynode 
>    - rep:policy (rep:ACL)
>      - allow (rep:GrantACE)
>        + principalName (String) = "myAuthorizable"
>        + rep:privileges (Name[]) = "rep:write"
>        - rep:restrictions (rep:Restrictions)
>           +   sling:resourceTypes (String[]) = 
> [myproj/resourcetype1,myproj/resourcetype2]
> {code}
> The example would only grant "rep:write" for the resource types 
> myproj/resourcetype1 and myproj/resourcetype2 in path /content/mynode, other 
> resources under path /content/mynode would not have "rep:write" permissions. 
> Additionally to strict resource type matching it shall be possible to 
> automatically match a resource with a given resource type including all 
> children. Also, not all content nodes have a resource type, therefore it 
> should be possible to match against a child node by appending \@path to the 
> resource type: 
> {code}
> - /content/myprj 
>    - rep:policy (rep:ACL)
>      - allow (rep:GrantACE)
>        + principalName (String) = "myAuthorizable"
>        + rep:privileges (Name[]) = "rep:write"
>        - rep:restrictions (rep:Restrictions)
>           +   sling:resourceTypesWithChildren (String[]) = 
> [myproj/resourcetype1@jcr:content]
> {code}
> To achieve this any path match attempt traverses the parents and checks for a 
> match (but only up to the base path, /content/myprj in this example). For AEM 
> use cases, this can match a whole page structure (e.g. something like 
> /content/myprj/path/to/newsoverview, the whole news section can be easily 
> matched by having a distinct news overview template). 
> \[1]
> https://jackrabbit.apache.org/oak/docs/security/authorization/restriction.html#Pluggability
> \[2]
> https://github.com/apache/jackrabbit-oak/blob/cea167f5bf70d818d58b1ffcc6bc65b3c0f9a5a4/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/NodeTypePattern.java#L50)
> https://github.com/apache/jackrabbit-oak/blob/cea167f5bf70d818d58b1ffcc6bc65b3c0f9a5a4/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/RestrictionProviderImpl.java



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to