[
https://issues.apache.org/jira/browse/SLING-10299?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17339642#comment-17339642
]
Bertrand Delacretaz edited comment on SLING-10299 at 5/5/21, 1:07 PM:
----------------------------------------------------------------------
Looks good to me but I think there's a slight risk of introducing ambiguities
at the grammar level with the {{remove}} statement, see the explanation below.
Using {{delete}} instead would avoid this risk, and I think it makes some sense
as we are actually completely deleting the ACL entries, as opposed to removing
just a specific one which is what {{remove}} currently means.
Would this syntax work for you?
{code:java}
delete ACL on /libs,/apps
delete ACL for alice, bob, fred
delete principal ACL for alice, bob
{code}
h3. Potential ambiguity explanation
I have added tests in [commit
08dfdaa|https://github.com/apache/sling-org-apache-sling-repoinit-parser/commit/08dfdaa652e5196d3640df28851f639baf367ced]
that demonstrate this, currently the parser accepts
{code:java}
remove jcr:ACL for userTestingSpecificRemove
{code}
And I think with SLING-10277 we are planning to remove the requirement for
privilege names to be namespaced, which whould make
{code:java}
remove ACL for userTestingSpecificRemove
{code}
A valid statement meaning "remove the ACL privilege for
userTestingSpecificRemove". We currently only support {{remove *}} at the JCR
level, but that statement is still valid from a grammar point of view, and we
might fully support it later.
Using {{delete}} instead of {{remove}} would remove this risk of ambiguity.
That keyword is currently only used in {{delete group}} and {{delete user}}
which are not ambiguous with the syntax discussed here.
was (Author: bdelacretaz):
Looks good to be but I think there's a slight risk of introducing ambiguities
at the grammar level with the {{remove}} statement, see the explanation below.
Using {{delete}} instead would avoid this risk, and I think it makes some sense
as we are actually completely deleting the ACL entries, as opposed to removing
just a specific one which is what {{remove}} currently means.
Would this syntax work for you?
{code}
delete ACL on /libs,/apps
delete ACL for alice, bob, fred
delete principal ACL for alice, bob
{code}
h3. Potential ambiguity explanation
I have added tests in [commit
08dfdaa|https://github.com/apache/sling-org-apache-sling-repoinit-parser/commit/08dfdaa652e5196d3640df28851f639baf367ced]
that demonstrate this, currently the parser accepts
{code}
remove jcr:ACL for userTestingSpecificRemove
{code}
And I think with SLING-10277 we are planning to remove the requirement for
privilege names to be namespaced, which whould make
{code}
remove ACL for userTestingSpecificRemove
{code}
A valid statement meaning "remove the ACL privilege for
userTestingSpecificRemove". We currently only support {{remove *}} at the JCR
level, but that statement is still valid from a grammar point of view, and we
might fully support it later.
Using {{delete}} instead of {{remove}} would remove this risk of ambiguity.
That keyword is currently only used in {{delete group}} and {{delete user}}
which are not ambiguous with the syntax discussed here.
> Allow for removal of access control policies (not just individual entries)
> --------------------------------------------------------------------------
>
> Key: SLING-10299
> URL: https://issues.apache.org/jira/browse/SLING-10299
> Project: Sling
> Issue Type: New Feature
> Components: Repoinit
> Affects Versions: Repoinit JCR 1.1.32, Repoinit Parser 1.6.6
> Reporter: Angela Schreiber
> Assignee: Angela Schreiber
> Priority: Major
>
> hi [~bdelacretaz], as outline in SLING-10134 the ability to cleanup access
> control content with repo-init is currently limited. while investigating ways
> to remove resource-based service user permissions in existing installations i
> noticed that there is one piece from the Jackrabbit API missing altogether:
> {{AccessControlManager.removePolicy(String absPath, AccessControlPolicy}}.
> repo-init language today allows for removal of individual access control
> entries and all entries, it doesn't provide the means to drop a policy
> (without specifying which entries to drop).
> the langage extension could look as follows for the 3 main types to set
> access control:
> {code}
> remove ACL on /libs,/apps
> remove ACL for alice, bob, fred
> remove principal ACL for alice, bob
> {code}
> IMO no {{end}} statement would be required as there are no additional entry
> specific statements present.
> since this would also be needed to cleanup AC content for principals that are
> being removed, I would strongly suggest to leave the principal-validation
> step to the repository and not mandate the target principal to exist. In
> order to not break subsequent executions I would also suggest to only log an
> INFO if the policy to remove doesn't exist.
> implementation wise it could look as follows (untested pseudo-code):
> {code}
> JackrabbitAccessControlList acl =
> AccessControlUtils.getAccessControlList(acMgr, jcrPath);
> if (acl != null) {
> acMgr.removePolicy(acl.getPath(), acl)
> } else {
> log.info(".....");
> }
> {code}
> {code}
> PrincipalAccessControlList acl = getPrincipalAccessControlList(acMgr,
> principal)
> if (acl != null) {
> acMgr.removePolicy(acl.getPath(), acl)
> } else {
> log.info(".....");
> }
> {code}
> for the case {{remove ACL for alice, bob, fred}} multiple options exist.... i
> would need to dig into the repo-init code to see what was best. in theory
> {{JackrabbitAccessControlManager.getPolicies(principal)}} should work and one
> only need to make sure not to delete the {{PrincipalAccessControlList}} if
> that existed as well.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)