>> On Tue, Dec 29, 2009 at 4:53 PM, Ian Boston <[email protected]> wrote:
>>> I notice that
>>>
>>> PluggableDefaultAccessManager.isGranted(ItemId id, int permissions)
>>>
>>> bypasses some additional logic in
>>> DefaultAccessManager.isGranted(ItemId id, int permissions)
>>>
>>> by going direct to
>>> PluggableDefaultAccessManager.isGranted(Path absPath, int permissions)
>>>
>>> was that intentional, this might be as a result of the JR 1.6 upgrade. ?

> On 3 Jan 2010, at 21:53, Vidar Ramdal wrote:
>> I think it was "intentional" in the sense that ItemId is part of the
>> org.apache.jackrabbit.core package, which is not exported - thus, it
>> would be impossible to implement the AccessManagerPlugin interface in
>> other bundles, if it defined a isGranted(ItemId, int) method.
>> From what I can see, the "additional logic" in
>> DefaultAccessManager.isGranted(ItemId, int) is merely optimization. Or
>> am I missing something?

On Mon, Jan 4, 2010 at 10:37 AM, Ian Boston <[email protected]> wrote:
> I wasnt thinking so much about the API for AccessManagerPlugin but the method 
> of impl for PluggableDefaultAccessManager
>
> A call to
>
> PluggableDefaultAccessManager.isGranted(ItemId id, int permissions)
> results in
> PluggableDefaultAccessManager.isGranted(Path absPath, int permissions)
> resulting in
> DefaultAccessManager.isGranted(Path absPath, int permissions)
>
> a call to
> DefaultAccessManager.isGranted(ItemId id, int actions)
> results in
> DefaultAccessManager.isGranted(Path absPath, int permissions)
>
> the 2 call stacks are almost identical except the default impl isolates the 
> passed in "actions" from the permissions bitmap.
>
>
> Effectively the pluggable version does
>
>       return this.isGranted(this.hierarchyManager.getPath(id), permissions);
>
> assuming the int parameter is permissions
>
>
> and the  default version does
>
>            int perm = 0;
>            if ((actions & READ) == READ) {
>                perm |= Permission.READ;
>            }
>            if ((actions & WRITE) == WRITE) {
>                if (id.denotesNode()) {
>                    // TODO: check again if correct
>                    perm |= Permission.SET_PROPERTY;
>                    perm |= Permission.ADD_NODE;
>                } else {
>                    perm |= Permission.SET_PROPERTY;
>                }
>            }
>            if ((actions & REMOVE) == REMOVE) {
>                perm |= (id.denotesNode()) ? Permission.REMOVE_NODE : 
> Permission.REMOVE_PROPERTY;
>            }
>            Path path = hierMgr.getPath(id);
>            return isGranted(path, perm);
>
> assuming the int parameter is "actions", although the API javadoc still talks 
> about it as being a limited set of permissions (READ, WRITE and REMOVE only). 
> (NB the method is deprecated in the 1.6 api)
>
>
>
> IMHO PluggableDefaultAccessManager.isGranted should do
>
> return super.isGranted(itemId, permissions)

Ah, you're right. I can't remember why I did it like that, but I was
certainly not aware of the difference between 'permissions' and
'actions'. If you'd like to rectify this, please do - although it
might not be necessary when the method is deprecated.

-- 
Vidar S. Ramdal <[email protected]> - http://www.idium.no
Sommerrogata 13-15, N-0255 Oslo, Norway
+ 47 22 00 84 00 / +47 21 531941, ext 2070

Reply via email to