Skip to content

ACP Draft design flaw #277

@matthieubosquet

Description

@matthieubosquet

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:apply links 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:apply and acp:access is 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:Control is 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:policy links 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:access and acp:apply from the ACP Draft in favour of acp:policy
  • Ammend all text in the spec that relates to those predicates

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions