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