-
Notifications
You must be signed in to change notification settings - Fork 48
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Decision: Access Rule with acl:default
does not imply acl:accessTo
#193
Comments
Emmet and I agree this should not happen. You shoudn't be able to give more access to the descendants but I'm interested in the spec team opinion. |
My own understanding is that |
In order to address ambiguities and tighten the spec, this issue should be taken up when specifying shape of ACL: #169 . I summarise some common knowledge: An ACL document may have zero or more authorization policies where each policy uniquely is described based on the following dimensions:
An authorization policy without a
A container's ACL may have one authorization policy including both A container's ACL may have two authorization policies where one only includes Simple situations:
Note https://solidproject.org/TR/protocol#deleting-resources :
From another angle: if it is possible to have Write access on a resource without Write on its containing container, then clients will not be able to delete the contained resource. At least for delete operations, it entails that a contained resources can be partly controlled by authorization policies in ACL documented as per ACL inheritance algorithm. The *nix filesystem permissions works the same way. In *nix filesystem, user is also granted to Read a file in a directory even if they don't have Read on directory. $ mkdir foo/
$ echo "bar" > foo/bar
$ chmod -r foo/
$ cat foo/bar
bar
$ ls foo/
ls: cannot open directory 'foo/': Permission denied
$ chmod -w foo/
$ rm foo/bar
rm: cannot remove 'foo/bar': Permission denied
$ chmod +w foo/
$ rm foo/bar So, at least, both behaviours mentioned above are compatible with *nix filesystem permissions - a significant compatibility IMO. |
Do I read this correctly : And the following example is not valid :
|
@bourgeoa That's correct. As far as I'm aware, there is currently no information that would help to determine which of the authorization policies including acl:default would be applicable. It could of course be arbitrarily argued that it should be the first one when listed, at random, a union, or one with least number of access modes or whatever may be considered to be "safe", .. .and so on. Possibly even just halt altogether and deny access. Simpler to restrict by allowing only max one acl:default per ACL document when an ACL is create or updated. We can indicate error handling. |
This isn't how I've understood how
But I think you can also have multiple |
@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. |
Updated #193 (comment) to indicate the dimensions that uniquely identifies an authorization policy. We can still edit this to frame it closer to what we like. |
(edited : sorry I did not see @megoth above comments) The above seems to be the actual way NSS does. ACL document created by mashlib authorization pane :
|
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. 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? |
I'm not opposed to changing the behavior, but this statement is not compelling:
Please reference the specification text the defines the correct behavior. |
Fair enough! I don't know if it's really clear from the text of https://github.com/solid/web-access-control-spec#referring-to-resources and https://github.com/solid/web-access-control-spec#default-inherited-authorizations but I think it's at least implied from the phrase "not every document needs its own individual ACL resource" that if a document does have its own ACL resource, then you would use |
"I think it's at least implied by the phrase" is also not compelling. See the discussion above which contradicts the point you are making, particularly #193 (comment) |
OK, marking this as disputed then. I'll skip the test for it until we reach consensus. |
Let's see if we can find a way out of this impasse: The facts:
Option 'yes'Then we:
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! |
@timbl @justinwb @dmitrizagidulin @kjetilk @csarven @RubenVerborgh you are in the editorial team, your voice is obviously very welcome in this discussion. |
@michielbdejong -- I'm pretty sure you meant for one of the "Option 'yes'" headers above to be "Option 'no'" (I think the second?)... |
Thanks! Fixed. |
Just chatted with @csarven about this. In line with what he said in #193 (comment). The description at http://www.w3.org/ns/auth/acl#default says:
So it starts with "if" and there is no "else". That means that Also https://github.com/solid/web-access-control-spec#referring-to-resources says "The |
@acoburn what do you think of this conclusion, can we find consensus on it? |
acl:default
also require an acl:accessTo
?acl:default
also imply an acl:accessTo
?
Changed the title to reflect what @Vinnl actually meant by the text, I think. |
I feel very strongly that the answer is "No". This is RDF. This is logic. The When something is simple and orthogonal and been so for many years, so we have to defend that against a proposal to make it more complicated and less expressive and different? |
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. Suppose the Resource R in question is in container C. For EVERY mode M needed,
To be more explicit, you could say:
Do NOT assume the modes will be on the same node N. Different modes may be supplied by quite different forms -- say one through |
@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 :) |
@acoburn was this fixed in ESS v1.1? |
Thanks for this issue and discussion. Closing this issue as consensus is deemed to be captured in WAC Editor's Draft: https://solid.github.io/web-access-control-spec/ . See #authorization-conformance #authorization-matching . Please use https://github.com/solid/web-access-control-spec for future discussion. |
acl:default
also imply an acl:accessTo
?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.)
("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.)The text was updated successfully, but these errors were encountered: