specification: Decision: Access Rule with `acl:default` does not imply `acl:accessTo`
In other words, is it impossible to define an inheritable default that gives more access to a Container’s descendants than to the Container itself?
Or with a code example: is this not a valid ACL Rule? (Syntax errors and prefixes notwithstanding.)
:ControlReadWriteDefault
a acl:Authorization;
acl:agentClass foaf:Agent;
acl:default tes:;
acl:mode acl:Control, acl:Read, acl:Write.
(“Valid” meaning: it gives everyone Read, Write and Control access to children of the Container that do not have their own ACL, and there’s no need for an acl:accessTo tes:; to do so.)
About this issue
- Original URL
- State: closed
- Created 4 years ago
- Comments: 27 (24 by maintainers)
Commits related to this issue
- Skip tests due to https://github.com/solid/specification/issues/193#issuecomment-784050910 — committed to solid-contrib/web-access-control-tests by michielbdejong 3 years ago
This isn’t how I’ve understood how
acl:defaultcan be used. You can have multiple instances ofacl:defaultfor many reasons, most notably for various agents:But I think you can also have multiple
acl:defaultfor same agent as well; the server would check them all until any of them gives the requested access (or if all fails, deny access).It also might need pointing out that the access function does not care if there is a bunch or Authentication nodes or one so long as there is the logical statement made which authorizes each mode needed. I was asked to put in some pseudocode for the function, hough it is a bit off topic.
Suppose the Resource R in question is in container C. To do the operation requires a set of modes. Then the operation is allowed iff
For EVERY mode M needed,
To be more explicit, you could say:
For EVERY mode M needed,
Do NOT assume the modes will be on the same node N. Different modes may be supplied by quite different forms – say one through
defaultand one throughaccessTo, one via the agent, one via a group and another by a class.@michielbdejong Just a heads-up: the title does now more accurately reflect the description I wrote in the original comment, but now the “yes” and “no” in your comment (referring to “the question in the title of this issue”) are in reverse 😃
Changed the title to reflect what @Vinnl actually meant by the text, I think.
@michielbdejong – I’m pretty sure you meant for one of the “Option ‘yes’” headers above to be “Option ‘no’” (I think the second?)…
Let’s see if we can find a way out of this impasse: Should the question in the title of this issue be answered with ‘yes’ or with ‘no’?
The facts:
Option ‘yes’
Then we:
acl:defaultshould be updated to addacl:accessToso their behaviour stays as intended.Option ‘no’
Then we:
Please vote. Also, if there are more arguments to vote ‘no’ other than the “it’s a footgun” argument which I hope I’m attributing correctly to the proponents of ‘no’, then please detail these - if they are compelling, the ‘yes’ voters might be convinced to switch!
From my understanding, I think the behaviour that’s currently implemented in NSS, PSS and CSS and tested by the Solid test suite, is the correct one (i.e.
acl:defaultandacl:accessToare orthogonal), and that we should ask Inrupt if they can align the behaviour of https://pod-compat.inrupt.com with that.Simple evidence of this is for instance https://github.com/solid/node-solid-server/blob/v5.6.4/default-templates/new-account/.acl#L20-L23: it’s basically the way it’s always been, and it probably doesn’t help the eco-system if newer implementations of Solid fork away from that?
@megoth True! Thanks for clarifying that. I went along with the example and completely skipped over acl:agent, :agentClass, :agentGroup as a dimension. It still holds true if multiple authorization policies have the same agents listed (along with default). System either needs to prevent their creation/updates - making sure authorization policies are indeed unique, or alternatively, it needs to know what to do if/when it encounters such policies.
My own understanding is that
defaultandaccessToare fully independent properties. That means that your above example do not give any access rights on inheritance algorithm.