Description
The Access Control Panel has been putting together protocol comparisons between WAC, ACP, and various WAC+ solutions. (WAC+ are potential ways of extending WAC in a backward compatible way).
The Effective Access Control Resource Discovery Use Case reveals a quite dramatic problem for WAC when a resource is using a default rule further up the hierarchy. We have 4 WAC+ ways to solve the problem listed in the document there. Please could the WAC community help us select one of them?
Problem description
Our resources are set up as follows:
</default.acr>
</foo/bar/baz/x>
</foo/bar/baz/x.acr>
- The client makes a request on
</foo/bar/baz/x>
and receives a response —
401 Credentials Required
Link: </foo/bar/baz/x.acr>; rel="acl"
Link: <.>; rev="http://www.w3.org/ns/ldp#contains"
...
The server needs to link to the closest possible ACR for the resource, to allow a client with Control rights to know what ACR to edit if it wants the rules there to apply specifically to that resource. If the resource were to link directly to the default, the client would not know where to overwrite the default.
- The client makes a request to the ACR
</foo/bar/baz/x.acr>
but receives the reponse —
404 Not Found
— as the resource does not yet exist.
- First the client is lucky enough to be shown the reverse
ldp:contains
relation in the response in (1) above, so it can do a HEAD on that to find itsACL
.
HEAD /foo/bar/baz/ HTTP/1.1
— and with luck the server will respond —
200 Ok
Link: </foo/bar/baz/.acr>; rel="acl"
Link: </foo/bar/>; rev="http://www.w3.org/ns/ldp#contains"
- The client can then continue with —
GET /foo/bar/baz/.acr HTTP/1.1
— to which the server will also return —
404 Not Found
— as the resource does not yet exist.
- As a result, the client will need to look up one level in the hierarchy to search for the effective ACR:
HEAD /foo/bar/ HTTP/1.1
— and with luck the server will respond —
200 Ok
Link: </foo/bar/.acr>; rel="acl"
Link: </foo/>; rev="http://www.w3.org/ns/ldp#contains"
- The client can then continue with —
GET /foo/bar/.acr HTTP/1.1
— to which the server will also return —
404 Not Found
— as the resource does not yet exist.
- As a result, the client will need to look up one level in the hierarchy to search for the effective ACR:
HEAD /foo/ HTTP/1.1
— and with luck the server will respond —
200 Ok
Link: </foo/.acr>; rel="acl"
Link: </>; rev="http://www.w3.org/ns/ldp#contains"
- The client can then continue with —
GET /foo/.acr HTTP/1.1
— to which the server will also return —
404 Not Found
— as the resource does not yet exist.
- As a result, the client will need to look up one level in the hierarchy to search for the effective ACR:
HEAD / HTTP/1.1
— and with luck the server will respond —
200 Ok
Link: </.acr>; rel="acl"
- The client can then continue with —
GET /.acr HTTP/1.1
— to which the server will finally return the content.
The number of requests needed to find the default can be calculated by the formula —
reqN = 2 * slashes + extraFile
— where —
slashes
is the number of slashes between the original resource and the effective ACRextraFile
is0
if the resource is anldp:Container
and1
if it is a plain resource
So in our example above we have reqN = 2 * 4 + 1 = 9
.
What we want is for that number to be cut down to 1 request.
As I mentioned there are 3 or 4 answers.
The one I prefer, as it is the simplest is explained in define another relation for non-created ACR.