ACLProvider/Entries Question.

3 messages Options
Embed this post
Permalink
Ian Boston

ACLProvider/Entries Question.

Reply Threaded More More options
Print post
Permalink
Hi,
First I assume I am looking at the correct ACLProvider ie  
acl.ACLProvider and not principalbased.ACLProvider or  
combined.ACLProvider.

I am looking at the acl.ACLProvider and the way in which it compiles a  
permissions set, so I can get a better understanding of the process  
prior to some minor local modifications.

 From what I understand, after reading the code and drawing [1]  
permissions are accumulated by processing an ordered list of entries.  
(ACLProvider#Entries)

Since this accumulation depends on the current state of the permission  
and privilege bitmaps as they a built up (those registers being  
"allows", "denies", "allowPrivilege", "denyPrivilege" ), (in  
ACLProvider.buildResult(path)).

  I think I am correct in saying that the order in which the Entries  
is processed is significant.
Is that correct ?

However looking at the implementation of Entries the underlying store  
is a ListOrderedMap which IIRC maintains the order in which elements  
were placed into the map, and AFAICT, the entries of the map are  
populated from a list of Principals in the Entries constructor (.  
AFAICT, the order of the Map or the list is not sorted before being  
used to build the permission bitmaps in ACLProvider.buildResult()

This implies that the order of the Principal names presented to  
Entries() determines the order in which the permissions are compiled  
in buildResult().

Is that correct ?

What I dont get, is

If a grant of a permission on a ancestor on one principal name (lets  
say the first principal name in the list) and deny the same permission  
on a child node (lets say the last principal name in the list), how  
that is reflected in the final "allows" bitmap ?

I think, the grant will be processed first, setting the bit in the  
allows, and allowsPrivilage bitmaps.
Then some time later the deny would be processed, but since the bit is  
already set in the allows/allowPrivilege Permissions.diff(...) will  
filter that bit out of the deny, and so the permission will still be  
allowed.

Obviously, if the principal names were the same the younger (eg child  
node) would have been processed first.

Was all of this intentional or should the principalNamesToEntries  
actually collet ACE in the order they are found working from child to  
ancestor ?
See [2] for an example.

If any of the above analysis isn't clear (v high probability :) ),  
please say and I will try and explain myself better.
Ian


[1] http://groups.google.com/group/sakai-kernel/web/jackrabbitPermissionsResolution.graffle.pdf
[2] http://groups.google.com/group/sakai-kernel/web/jackrabbitPermissionsEntriesOrder.graffle.pdf
Angela Schreiber

Re: ACLProvider/Entries Question.

Reply Threaded More More options
Print post
Permalink
maybe you can write a test that demonstrates it and add comments,
what would be the expected outcome in your opinion? that normally
reads much faster, doesn't it?

angela

Ian Boston

Re: ACLProvider/Entries Question.

Reply Threaded More More options
Print post
Permalink
Ok I will find some time in the next week or so to try this.
I have a patch which changes the way entries are added to maintain the  
strict hierarchical order regardless of the ACE/principal that  
produces the privilage, but I am not confident that its correct until  
I have done a battery of tests in Sling on it.
Ian

On 7 Jul 2009, at 09:19, Angela Schreiber wrote:

> maybe you can write a test that demonstrates it and add comments,
> what would be the expected outcome in your opinion? that normally
> reads much faster, doesn't it?
>
> angela
>