-
Notifications
You must be signed in to change notification settings - Fork 18
Description
On proposal
ACP: Remove the acp:apply and acp:access predicates in favour of a single acp:policy predicate.
Details
Description
ACP is a data model to express the conditions of access to resources.
An ACP Access Control Resource mandates access over a resource.
Why talk about controlling access to Access Control Resources when the spec does not talk about controlling access to Access Controls, Policies and Matchers?
The only thing ACP is talking about is controlling access to resources and it should not talk about controlling access to Access Control Resources because there is nothing special about them.
RDF and Cool URIs talk about what a resource is, ACP is orthogonal to those documents.
The Solid Protocol defines the relationship between a resource and its auxiliary resources, for example authorization resources, ACP is orthogonal to the Solid Protocol.
In the case of the Solid Protocol, an authorization resource lifecycle depends on the lifecycle of the subject resource that they are associated with.
Currently, the ACP spec treats the Access Control Resource as a specifically separate resource with its own access modes which is incorrect, hints at a separate lifecycle and is hardly compliant with Solid.
The ACP specification should remove every mention of an ACR mandating control over itself.
It is not up to ACP to mandate that permissions over an Access Control Resource will be mandated by another Access Control Resource (ACR on ACR), by a specific access mode (the Solid compliant acl:Control) or by another mechanism.
Logically, this also entails removing the acp:access and acp:apply predicates that invent a new way of mandating control over Access Control Resources hence implying that they are special, as opposed to Access Controls, Policies and Matchers.
The acp:access and acp:apply predicate should be removed in favour of a neutral and spec orthogonal predicate acp:policy.
Details of the current situation
In ACP there are currently two predicates to link an Access Control to a Policy:
acp:applylinks an Access Control to the policies applying to the Resource itself::acr acp:resource :resource . :acr acp:accessControl :acl . :acl acp:apply :policy . # :policy applies to :resource- acp:access links an Access Control to the policies applying to the Access Control Resource:
:acr acp:resource :resource . :acr acp:accessControl :acl . :acl acp:access :policy . # :policy applies to :acr
Drawbacks from an implementers’ perspective in addition to the fundamental design flaw might be worth mentioning:
- The distinction between
acp:applyandacp:accessis confusing, that is, the semantics of these predicates is unclear/misleading and has previously been discussed as far from ideal. - The distinction hints that there would be a separate lifecycle for a resource and access control resource which is not the case in Solid.
- The distinction drives ACP away from Solid Protocol compatibility where the access modes are/should be defined as entailing operations and where
acl:Controlis used. - Policies can be reused and applied to both Access Control Resources and Resources with no indication whatsoever of which. That makes it easy to over-permission a Policy and is a security concern.
- It is inconsistent with the rest of the ACP data model.
Proposal
The proposed solution would be to use a single acp:policy predicate which would remove the design flaw, spec orthogonality issues and aforementioned implementers’ problems:
acp:policylinks an Access Control to a Policy::acr acp:resource :resource . :acr acp:accessControl :acl . :acl acp:policy :policy . :policy acp:allow acl:Read, acl:Write, acl:Control .
Acceptance criteria
What actions are needed to resolve this issue?
- Remove
acp:accessandacp:applyfrom the ACP Draft in favour ofacp:policy - Ammend all text in the spec that relates to those predicates