2012-03-28 19:08, Denis Gervalle skrev:
> On Wed, Mar 28, 2012 at 11:24, Vincent Massol <[email protected]> wrote:
> 
>> Hi Denis,
>>
>> On Mar 28, 2012, at 11:04 AM, Denis Gervalle wrote:
>>
>> [snip]
>>
>>>> Denis, do you plan to refactor some existing code to use this new API?
>> IMO
>>>> this would be the best next step to prove that it works.
>>>
>>>
>>> It works, I use it everyday ! Their minor differences only impact really
>>> special usage.
>>
>> We all know the "it works on my machine" syndrome but that doesn't prove
>> anything… :)
>>
>> As I said in another mail we really need a very code unit test coverage.
>>
>>>> Fo you have any idea about what code could be migrated?
>>>>
>>>
>>> IMO, we may start using it for new components, or components that we are
>>> refactoring, since it will allow being independent of the old core for
>>> these component. This module may works for a while in parallel with the
>>> existing service.
>>
>> I was asking for an example of what we could start with. Do you have any
>> idea?
>>
>>> By merging it, and providing it as an option, it will allows more user to
>>> try it. There is a bridge between the old service and this new one that
>> you
>>> may simply activate in xwiki.cfg. This new service improve performance,
>>> allow adding more rights on the fly and allow customizing the way it
>> works,
>>> so it is an answer to those wanting these improvements.
>>>
>>>
>>>> We need to be careful not to keep this new security module not used for
>>>> too long as otherwise it could "rot".
>>>
>>>
>>> It will not stay unused on my side, so be sure I will stay close to it,
>>> since I have written it because I need those improvements. I really
>>> encourage anyone to try it !
>>>
>>>
>>>> So IMO we need to start using it ASAP and then have a plan for switching
>>>> to it.
>>>>
>>>
>>> IMO, the switch will be welcome when we have discussed the small
>>> differences it has, and fix the few we do not tolerate. In particular,
>> the
>>> startup of an empty wiki require login has superadmin with this new
>> module.
>>> I know this require more documentation to be written, I am really aware
>> of
>>> that, this just require time to be done... hopes Andreas and others could
>>> helps as well.
>>
>> For me you are now responsible for this part (even though technically
>> we're all responsible of course since we use no code ownership ;) - but for
>> example Thomas and I know more the Rendering and are fixing stuff there,
>> while others have more knowledge in other parts).
> 
> 
> Have I said the contrary ? All I said is that I will do my best supporting
> it, but this is really a large part, and some help is also welcome. I have
> taken the time to have it at the current state in the hope we will be able
> to move out of the crappy service we use currently more that 20 times per
> requests. It is now mature enough to start using it, since we do, and...
> 

I will also support this module, of course, and help out fixing issues
with it, and add more unit tests.  I feel much more motivated to work on
it when it is on track to replace the old implementation.

Best Regards,

/Andreas


>> I understand you wanted this in the platform because you're using it
>> already.
> 
> 
> ...no, I am not so concerned about having it in platform for using it. I
> now trust my module more than the existing implementation. I would like to
> have it in platform to encourage others to look at it, use it, adopt it and
> contribute to it, since I am really confident it is really better than the
> current implementation.
> 
> 
>> I just want to be sure we're going to maintain it since I can see it'll
>> require a lot more work before being to full switch to this implementation.
>>
> 
> IMO, there is even more work to do to use the current right service, since
> its own test cover only 52% of the right service itself and the
> documentation is really sparse and almost unwritable ! (BTW, these tests
> cannot be used on our bridge since these use implementation method that are
> not published in the interface.)
> 
> 
>>
>> Thanks
>> -Vincent
>>
>>>> Thanks
>>>> -Vincent
>>>>
>>>> On Feb 15, 2012, at 11:17 AM, Denis Gervalle wrote:
>>>>
>>>>> Hi all,
>>>>>
>>>>> As you have probably notice, I have recently committed an
>>>>> feature-security-authorization branch on platform. I am working on this
>>>> for
>>>>> a while now and it was the first step to share the outcome of this
>> large
>>>>> refactoring of the initial work done early last year by Andreas. Since
>>>> the
>>>>> code was not quality compliant with platform but the general structure
>>>>> Andreas has build seems to me well appropriate, I have progressively
>>>>> refactor its code to better fit our real needs. Here is what I have
>> been
>>>>> done:
>>>>>
>>>>> 1) Split in to module api and bridge to allow breaking the currently
>>>>> unavoidable dependency on oldcore. Now only bridge depends on oldcore,
>>>> and
>>>>> the api does not depends on bridge. As mush as possible has been
>> written
>>>> in
>>>>> the api (still some code to migrate), and some temporary internal
>> bridge
>>>>> are used to access oldcore stuffs since augmenting the existing
>>>>> document-bridge does not seems appropriate IMO.
>>>>>
>>>>> 2) The initial enumeration of rights as been replaced by a Right class,
>>>>> which could be seen has a pseudo enum, but could be augmented with new
>>>>> rights. To register a new Right, you have to provide a RightDescription
>>>> to
>>>>> the AuthorizationManager. The description will define the default
>> state,
>>>>> the tie resolution policy, the inheritance policy, the list of entity
>>>> types
>>>>> for which the right is applicable, the implied rights and if the right
>>>>> could be allowed in read-only mode. So new defined Right will benefit
>> the
>>>>> whole logic of the AuthorizationManager and currently existing one
>> could
>>>> be
>>>>> declaratively defined.
>>>>>
>>>>> 3) Large renaming to better distinguish stuffs, clarify comments and
>>>>> prepare for future. I have voluntarily not taken existing names to
>>>> clearly
>>>>> split the old and the new api. In brief, the new right service is now
>>>> named
>>>>> AuthorizationManager. Internally, it manipulates SecurityReference (as
>>>> well
>>>>> as UserSecurityReference and GroupSecurityReference, to represent
>>>> entities,
>>>>> user and group), SecurityRule (representing a right object) and
>>>>> SecurityAccess (representing an access level in the old nomenclature),
>>>>> which are store in a SecurityCache using SecurityRuleEntry (a set of
>>>> rules)
>>>>> and SecurityAccessEntry (the access of a given user). The
>>>>> AuthorizationManager delegate cache management to a SecurityCacheLoader
>>>>> which loads rules using a SecurityRuleLoader ; and delegate itself the
>>>>> computing of the access for a given user and a set of rules to an
>>>>> AuthorizationSettler. This last one could be overridden to provide
>>>> specific
>>>>> decision that could not be done in declarative mode.
>>>>>
>>>>> 4) Refactoring was necessary to improve consistency and reduce
>>>> complexity,
>>>>> and simplify as much as possible; while extending the limitations to
>>>> allow
>>>>> more rights to be registered. This work has been a little bit opposed
>> to
>>>>> the optimization done by Andreas, in particular on memory usage. But
>>>>> optimization is often the enemy of clean code.
>>>>>
>>>>> 5) Improvement were necessary to better mimic the existing
>> implementation
>>>>> in some peculiar but necessary rules to stay compatible with current
>>>>> working wiki. I tend to reduce as much as possible what is not done
>>>>> declaratively, but there are still some special cases, like delete for
>>>>> creators, deny for other user on explicit allow and admin for wiki
>> owner
>>>>> that are settle by the authorization settler. My implementation should
>> be
>>>>> almost compatible with the old one, except for groups that are
>> currently
>>>>> not checked from the entity wiki, but only from the user wiki. This
>> needs
>>>>> some more refactoring for which I feel inconfortable with, some I'd
>> like
>>>> to
>>>>> share first.
>>>>>
>>>>> 6) The AuthorizationManager interface has been simplified, providing 2
>>>>> methods for either checking or verifying an access right (the checking
>>>>> methods throws while the verifying one return a boolean), and one to
>>>>> register a new right.
>>>>>
>>>>> The existing RightService could be bridged on the new implementation
>>>> using
>>>>> the XWikiCachingRightService class in xwiki.cfg and the new API could
>> be
>>>>> used side-by-side with the old implementation as well. What should
>> still
>>>>> really need to be improved is the unit testing, currently some tests
>> are
>>>>> still awful and incomplete. I already refactor some of them, to
>> provide a
>>>>> better coverage of essential part of the code: the security cache and
>> the
>>>>> default authorization settler. Obviously, any help is welcomed.
>>>>>
>>>>> Since I already have an existing wiki using this implementation
>>>>> successfully and using it for creating new rights for extensions, I
>> would
>>>>> like to merge this new implementation as experimental in platform to
>> have
>>>>> it available for anyone who need it or want to test it, and for you to
>>>> use
>>>>> in your new experimental development as well. Providing it in platform
>>>> will
>>>>> encourage it to be finalized and replace the existing implementation.
>>>>>
>>>>> Here is my +1 for the merge on 4.x,
>>>>>
>>>>> WDYT ?
>> _______________________________________________
>> devs mailing list
>> [email protected]
>> http://lists.xwiki.org/mailman/listinfo/devs
>>
> 
> 
> 

_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to