You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2015/12/17 11:13:00 UTC

svn commit: r1720504 - in /sling/trunk/contrib/extensions/acldef-parser/src: main/java/org/apache/sling/acldef/parser/operations/AclLine.java main/javacc/ACLDefinitions.jjt test/resources/testcases/test-30-output.txt test/resources/testcases/test-30.txt

Author: bdelacretaz
Date: Thu Dec 17 10:13:00 2015
New Revision: 1720504

URL: http://svn.apache.org/viewvc?rev=1720504&view=rev
Log:
SLING-5355 - initial principal-centric syntax, work in progress

Added:
    sling/trunk/contrib/extensions/acldef-parser/src/test/resources/testcases/test-30-output.txt
    sling/trunk/contrib/extensions/acldef-parser/src/test/resources/testcases/test-30.txt
Modified:
    sling/trunk/contrib/extensions/acldef-parser/src/main/java/org/apache/sling/acldef/parser/operations/AclLine.java
    sling/trunk/contrib/extensions/acldef-parser/src/main/javacc/ACLDefinitions.jjt

Modified: sling/trunk/contrib/extensions/acldef-parser/src/main/java/org/apache/sling/acldef/parser/operations/AclLine.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/acldef-parser/src/main/java/org/apache/sling/acldef/parser/operations/AclLine.java?rev=1720504&r1=1720503&r2=1720504&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/acldef-parser/src/main/java/org/apache/sling/acldef/parser/operations/AclLine.java (original)
+++ sling/trunk/contrib/extensions/acldef-parser/src/main/java/org/apache/sling/acldef/parser/operations/AclLine.java Thu Dec 17 10:13:00 2015
@@ -37,7 +37,7 @@ public class AclLine {
     
     public AclLine(Action a, List<String> privileges, List<String> usernames) {
         action = a;
-        this.usernames = Collections.unmodifiableList(usernames);
+        this.usernames = usernames == null ? null : Collections.unmodifiableList(usernames);
         this.privileges = privileges == null ? null : Collections.unmodifiableList(privileges);
     }
     

Modified: sling/trunk/contrib/extensions/acldef-parser/src/main/javacc/ACLDefinitions.jjt
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/acldef-parser/src/main/javacc/ACLDefinitions.jjt?rev=1720504&r1=1720503&r2=1720504&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/acldef-parser/src/main/javacc/ACLDefinitions.jjt (original)
+++ sling/trunk/contrib/extensions/acldef-parser/src/main/javacc/ACLDefinitions.jjt Thu Dec 17 10:13:00 2015
@@ -4,7 +4,7 @@
  
 options
 {
-    LOOKAHEAD=2;
+    LOOKAHEAD=3;
     STATIC=false;
 }
 
@@ -62,6 +62,7 @@ TOKEN:
 |   < SERVICE: "service" >
 |   < END: "end" >
 |   < USER: "user" >
+|   < NODETYPES: "nodetypes" >
 |   < USERNAME: (["a"-"z"] | ["A"-"Z"] | ["0"-"9"] | "_" | "-")+ >
 |   < COMMA: "," >
 |   < STAR: "*" >
@@ -75,7 +76,13 @@ List<Operation> parse() :
 {
     { final List<Operation> result = new ArrayList<Operation>(); }
     
-    ( serviceUserStatement(result) | setAclStatement(result) | blankLine() ) * <EOF>
+    ( 
+        serviceUserStatement(result) 
+        | pathsAclStatement(result) 
+        | principalAclStatement(result) 
+        | blankLine() 
+    ) * 
+    <EOF>
     
     { return result; }
 }
@@ -120,7 +127,7 @@ void serviceUserStatement(List<Operation
     }
 }
 
-List<String> privilegesList() :
+List<String> namespacedItemsList() :
 {
     Token t = null;
     List<String> priv = new ArrayList<String>(); 
@@ -144,15 +151,14 @@ List<String> pathsList() :
     { return paths; }
 }
 
-void setAclStatement(List<Operation> result) :
+void pathsAclStatement(List<Operation> result) :
 {
     List<String> paths;
     List<AclLine> lines = new ArrayList<AclLine>();
 } 
 {
-    <SET> <ACL> <ON> 
-    paths = pathsList() <EOL>
-    ( removeStarLine(lines) | privilegesOperationLine(lines) | blankLine() ) +
+    <SET> <ACL> <ON> paths = pathsList() <EOL>
+    ( removeStarLine(lines) | userPrivilegesLine(lines) | blankLine() ) +
     <END> 
     ( <EOL> | <EOF> )
     
@@ -163,19 +169,19 @@ void setAclStatement(List<Operation> res
 
 void removeStarLine(List<AclLine> lines) : 
 {
-    List<String> usernames;
+    List<String> usernames = null;
+    List<String> paths = null;
 }
 {
     <REMOVE> <STAR> 
-    <FOR> usernames = usernamesList() 
+    (
+        <FOR> usernames = usernamesList() { lines.add(new AclLine(AclLine.Action.REMOVE_ALL, null, usernames)); }
+        | <ON> paths = pathsList()
+    )     
     <EOL>
-    
-    { 
-        lines.add(new AclLine(AclLine.Action.REMOVE_ALL, null, usernames)); 
-    }
 }
 
-void privilegesOperationLine(List<AclLine> lines) :
+void userPrivilegesLine(List<AclLine> lines) :
 {
     AclLine.Action action = AclLine.Action.REMOVE_ALL;
     List<String> privileges;
@@ -187,11 +193,49 @@ void privilegesOperationLine(List<AclLin
         | ( <ALLOW>     { action = AclLine.Action.ALLOW; } )
         | ( <DENY>      { action = AclLine.Action.DENY; } )    
     ) 
-    privileges = privilegesList() 
-    <FOR> usernames = usernamesList() 
+    privileges = namespacedItemsList() 
+    <FOR>
+    usernames = usernamesList() 
     <EOL>
 
     {    
         lines.add(new AclLine(action, privileges, usernames)); 
     }
+}
+
+void pathPrivilegesLine(List<AclLine> lines) : 
+{
+    AclLine.Action action = AclLine.Action.REMOVE_ALL;
+    List<String> privileges;
+}
+{
+    ( 
+        <REMOVE>        { action = AclLine.Action.REMOVE; }
+        | ( <ALLOW>     { action = AclLine.Action.ALLOW; } )
+        | ( <DENY>      { action = AclLine.Action.DENY; } )    
+    ) 
+    privileges = namespacedItemsList() 
+    <ON> pathsList()
+    ( <NODETYPES> namespacedItemsList() ) ?
+    <EOL>
+    
+    {    
+        lines.add(new AclLine(action, privileges, null)); 
+    }
+}
+
+void principalAclStatement(List<Operation> result) :
+{
+    List <String> usernames;
+    List<AclLine> lines = new ArrayList<AclLine>();
+}
+{
+    <SET> <ACL> <FOR> usernames = usernamesList() <EOL>
+    ( removeStarLine(lines) | pathPrivilegesLine(lines) | blankLine() ) +
+    <END> 
+    ( <EOL> | <EOF> )
+    
+    {
+        result.add(new SetAcl(usernames, lines));
+    }
 }
\ No newline at end of file

Added: sling/trunk/contrib/extensions/acldef-parser/src/test/resources/testcases/test-30-output.txt
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/acldef-parser/src/test/resources/testcases/test-30-output.txt?rev=1720504&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/acldef-parser/src/test/resources/testcases/test-30-output.txt (added)
+++ sling/trunk/contrib/extensions/acldef-parser/src/test/resources/testcases/test-30-output.txt Thu Dec 17 10:13:00 2015
@@ -0,0 +1 @@
+SetAcl on [user1, u2] : [ALLOW [jcr:read] for null, DENY [jcr:write] for null, DENY [jcr:lockManagement] for null, REMOVE [jcr:understand, some:other] for null]
\ No newline at end of file

Added: sling/trunk/contrib/extensions/acldef-parser/src/test/resources/testcases/test-30.txt
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/acldef-parser/src/test/resources/testcases/test-30.txt?rev=1720504&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/acldef-parser/src/test/resources/testcases/test-30.txt (added)
+++ sling/trunk/contrib/extensions/acldef-parser/src/test/resources/testcases/test-30.txt Thu Dec 17 10:13:00 2015
@@ -0,0 +1,12 @@
+# Test the principal-centered ACL syntax
+
+set ACL for user1,u2
+    remove * on /libs,/apps
+    allow jcr:read on /content
+
+    deny jcr:write on /apps
+    
+    # Optional nodetypes clause 
+    deny jcr:lockManagement on /apps, /content nodetypes sling:Folder, nt:unstructured   
+    remove jcr:understand,some:other on /apps
+end
\ No newline at end of file