Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [stellation-res] Access control list inheritance behavior question

On Sat, Sep 28, 2002 at 10:50:41AM +0000, Mark C. Chu-Carroll wrote:
> 
> I've finally got some time to implement ACLs for the repository. I'm
> working on implementing the inheritance behavior. In the docs we've
> written so far,  we haven't completely specified the ACL inheritance
> behavior. There are a couple of variations, and I'm unsure of which
> one is really what we want.
> 
> There are three possible behaviors that make sense to me:
> 
> (1) Inheritance as immediate copy. In this scheme, when we create a new
>   repository entity, the ACL inheritance means that a new ACL is created
>   for the new entity by copying the ACL of its parent. In terms of using
>   the system, this means that modifying the ACL of the parent *never*
>   has an effect on the child.
> 
> (2) Inheritance as lazy copy. There are two variants here.   The
>   behavioral effect of these is that changes to the parent ACL
>   are reflected in the child *until* you specifically do something
>   to make the lists be distinct.
> 
>   (2a) Automatic ACL copy on child modification: In this scheme, when we
>   create a new repository entity, it uses the *same* ACL as its parent.
>   When you modify the ACL of the child, it creates a copy of the parent
>   ACL, and modifies that. 
> 
>   (2b) Explicit ACL copy: In this scheme, when we create a new
>    repository entity, it uses the *same* ACL as its parent. It continues
>    to use exactly the same ACL as its parent until the user explicitly
>    asks the system to create an ACL for the child; when the user does
>    so, it copies the parents ACL. So until the user explicitly copies
>    the ACL, changing the parent ACL and changing the child ACL are one
>    and the same. Once the user copies the ACL, it behaves as in (1).
> 
> (3) Inheritance as ACL delta. This is closest to a object inheritance
>   behavior. Here, when you create a new repository entity, we create a
>   a new ACL for it; and that new ACL references the parent ACL. The 
>   new ACL consists of a set of deltas against the ACL of the parent. 
> 
>   The effect of this is that changes to the parent *always* effect the
>   ACL of the child, but changes to the child do not effect the ACL of
>   the parent.
> 
> Pros and cons: 
> 
> There's a lot of niceness about (3). The catch is that
> from an administrators point of view, it's difficult to make it work so
> that (3) does *quite* what you might expect.  For example, if as an
> administrator, you withdraw checkin privileges for a group, that will
> remove checkin privileges from *most* places. But here's where it'll
> go wrong.  A user forks branch "A" off of main. For branch "A", they
> remove checkin privileges from group "g". Then someone forks "B" off of
> "A", and they *add* checkin privileges for group "g".  Now an
> administrator wants to withdraw all checkin privs for "g". They do it on
> "main", which is the parent of all the others. "g" still has
> checkin privileges on "B". So while in theory, (3) feels right, I think
> it's likely to cause confusion by misleading people into thinking they
> can do something by modifying a parent ACL that they can't really do
> that way. So I'm not sure that I want to do it this way...
> 
> I'm not particularly wild about either of the lazy copy methods. The
> abrupt change from inherited behavior to independent behavior is just
> not going to be intuitive.
> 
> (1) is very inflexible, but it is the easiest to understand.
> 
> So I'm mostly vacillating between (1) and (3), but I could be
> convinced to go with (2a) or (2b) if you folks strongly prefer it.

I suggest we follow the "principle of least astonishment" and go with
the POSIX behavior for ACLs - I have no clue what it is, but supposedly
they thought about it and some people/admins are already familiar with
it. Or come with a good reason why not.

Now what I see is that for compound artifacts there are extra actions
that are not available for atoms like "list contents", "add item",
"remove item", so it might make sense for a parent to have a "default
ACL for children".

I am -1 for 3: it is too much magic - and magic can be dangerous. If
they want to affect a whole tree with a single command, give them "-R".

florin

-- 

"If it's not broken, let's fix it till it is."

41A9 2BDE 8E11 F1C5 87A6  03EE 34B3 E075 3B90 DFE4

Attachment: pgpfJdSiGL7ic.pgp
Description: PGP signature


Back to the top