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). I understand you wanted this in the platform because you're using it already. 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. 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

