[ 
https://issues.apache.org/jira/browse/SLING-9212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17061104#comment-17061104
 ] 

Ashish Chopra commented on SLING-9212:
--------------------------------------

bq. In case of DELETE request, apart from the configured permissions, it also 
checks for jcr:removeNode permissions for the user on the path. This check 
happens on the exporter side but AFAIU, the actual deletion happens on the 
importer endpoint. The content does not get deleted on exporter side. In that 
case, this permission check should happen on importer side.
While I agree that checking for a DELETE distribution action remove/delete 
privilege at the source sling instance is incorrect, I'd argue against checking 
for any privilege on the target (recipient) Sling instance because:
* semantically it is entirely target sling instance's business what it does 
with incoming content. It might not even have the same access control paradigm 
as the source sling instance. The target sling instance can choose to reject an 
incoming distribution by performing any validation it wishes, but source sling 
instance need not be bothered about those rules. If the target instance doesn't 
like the distribution request, it responds with a failure - that should be the 
only contract. 
* implementation wise, such a "pre-validation" (which should be abstracted 
rather than just concerning itself with permission validation) might require in 
a remote call to target sling instance, which will not be desirable esp when 
there is a middleware involved (say, Apache Kafka)

I'd propose that validation of a custom privilege - specific to 
content-distribution - at the source instance should be _sufficient_ to 
determine if distribution request should be _created_ at all or not. This 
privilege should be enforced outside JCR and the enforcement should only be 
restricted to source sling instance.

> Distribution code checks for jcr:removeNode permissions on importer side for 
> DELETE request
> -------------------------------------------------------------------------------------------
>
>                 Key: SLING-9212
>                 URL: https://issues.apache.org/jira/browse/SLING-9212
>             Project: Sling
>          Issue Type: Bug
>          Components: Content Distribution
>            Reporter: Mohit Arora
>            Priority: Major
>             Fix For: Content Distribution Core 0.4.4
>
>
> When a resource is distributed from one endpoint to other with RequestType 
> set to DELETE, the execute method of SimpleDistributionAgent [checks the 
> permissions for the passed resolver on given 
> path(s)|https://github.com/apache/sling-org-apache-sling-distribution-core/blob/master/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java#L175].
>  In case of DELETE request, apart from the [configured 
> permissions|https://github.com/apache/sling-org-apache-sling-distribution-core/blob/master/src/main/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategy.java#L85],
>  it also checks for {{jcr:removeNode}} permissions for the user on the path. 
> This check happens on the exporter side but AFAIU, the actual deletion 
> happens on the importer endpoint. The content does not get deleted on 
> exporter side. In that case, this permission check should happen on importer 
> side.
> cc - [~marett], [~ashishc]



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to