2012-03-28 18:29, Denis Gervalle skrev:
> On Wed, Mar 28, 2012 at 11:18, Vincent Massol <[email protected]> wrote:
> 
>> Actually I've now looked at the merge and I've made some quick review in
>> GitHub (I've only done this very quickly nothing thorough).
>>
> 
> Have you read my initial mail about this merge proposal ?
> The branch was there for a while, and I see that merging is the best way to
> have you look at it :)
> 
> It's a good start but there are quite a few things to improve:
>>
>> * Test are a bit of a mess: very long methods (should have a lot more test
>> methods), some bad practices in several places, creating static mocks
>> instead of dynamic mocks.
> 
> 
> The tests in the bridge are bad, those came directly from the initial
> contribution of Andreas, these are not properly mocked, neither properly
> structured. I have kept them until we have better.

Writing proper tests have been on my TODO-list since june 2010.  Now
when it is finally on-track to be included as the default
implementation, I'll be happy to write some tests.

Best Regards,

/Andreas

>> * Missing javadocs in lots of places
> 
> 
> This is unfair, this happen mostly in tests. I will try to improve it
> anyway.
> 
> 
>> * Missing @since tags
>>
> 
> Not easy to put @since until we know when we merge, will be improved. Would
> be nice not have to do that manually :)
> 
> 
>> * We also need to stabilize/comment on the API method names themselves.
>> I've commented on a few.
>>
>> I'd like to know what's the test coverage percentage you have? We need at
>> least 80 to 90% (if not more) for this type of code IMO since it's very
>> sensitive.
>>
> 
> I have written the test in the api module. Those in the api module are
> properly mocked and covers the most critical part (right, settler, data
> structure, cache) at almost 100%, and the whole api module at 60%
> currently. I see the api module as the most solid one, and the bridge as a
> temporary one, until we go further, but I fully agree that we need to
> improve tests in both. Your help is welcome :)
> 
> 
>>
>> Thanks
>> -Vincent
>>
>> On Mar 28, 2012, at 10:33 AM, Vincent Massol wrote:
>>
>>> +1 if you lead the effort to making this implementation the default in
>> the future.
>>>
>>> I'd like to know what are the next steps though and their timeframe.
>>>
>>> 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. Fo you have
>> any idea about what code could be migrated?
>>>
>>> We need to be careful not to keep this new security module not used for
>> too long as otherwise it could "rot". So IMO we need to start using it ASAP
>> and then have a plan for switching to it.
>>>
>>> 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