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).
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. * Missing javadocs in lots of places * Missing @since tags * 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. 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

