Description
Overview
Here is a proposal that extends WAC without changing its default behavior as deployed, which currently is that only users with acl:Control
mode rights can view and edit the ACL document. It is also compatible with ACP and could be used there too.
This proposal allows organizations with the need to make ACLs more widely readable, to make those available as they wish -- at their own risk. This feature is needed for the Minimal Credential Disclosure use case, and for a use case on the principle of least privilege which is not yet part of the UCR document. (hoping @justinwb will add such a use case)
In this description I build on the wac:authorizes
relation discussed in issue 184: Limitations: re-using policies , but that is not a requirement for this proposal. (If you don't like that proposal just remove the authorizes
relations from the diagram and turn the dotted lines into solid ones.)
Description
I illustrate this with the following diagram of a public organization (the W3C) that must show transparency in its workings. Note, that in the first comment below I show how this can work with more complicated cases where parts of the contents of the Access Control statements are protected.
@timbl has a public foaf card with a link to the its acl resource in the HTTP Link: <card.acl>; rel="acl"
header. This card.acl
document states that anyone can view the card
resource and that Tim Berners-Lee also has write privileges to, via his WebID Profile card
. On existing deployed systems the <card.acl>
would not be readable by anyone, apart from Tim.
To help read the diagram here is the content of card.acl
:
<#> wac:authorizes <personal#A1>;
wac:authorizes [ acl:agentClass foaf:Agent;
acl:mode acl:Read ].
it links to the <personal#A1> authorization which gives access to Tim in read and write mode.
<#A1> acl:mode acl:Read, acl:Write,
acl:agent <card#i> .
In both those cases as developed in issue 184 the client and server can deduce the acl:accessTo
relation from the existence of the accessControl
Link
header followed by the wac:authorizes
relation. That is an idea taken from ACP which adds a lot of flexibility to the system, but is not central to the argument here.
The Proposal here is that if the ACL document X
itself has a HTTP Link
header relation of type acl
(or acl:accessControl
) to Y
, then the Y
ACL sets the access control rules on X
. So here the card.acl
is readable by any authenticated agent because it has an accessControl
Link
header (show in double lines) to the </People/Default.acl>
resource which says (after authorizes
reasoning is applied) that all Authenticated Agents can read the card. This is a very lax restriction - any type of authentication is allowed here - which is used here for illustration purposes to show that one can have different access control restrictions.
[] acl:agentClass acl:AuthenticatedAgent;
acl:mode acl:Read;
acl:accessTo </BernersLee/card.acl> .
And indeed because the W3C wishes to be fully transparent, that resource also has an acl to itself, making itself readable by anyone who is authenticated too.
This extension should be completely compatible with the current WAC spec, in so far as it does not change the behavior of existing systems. But as it allows ACLs to be restricted in the same way other documents can be - using exactly the same ontology - we can be more flexible. It may affect how test systems are written though (cc @michielbdejong ).
I proposed something very similar for ACP in use 151 for which it work the same way too. This means that people really worried about readability of ACLs (as per Allow ACL doc discovery without acl:Control) can be as secure-by-default as is reasonable, but others that want to be more transparent can be so too.