No, please, keep this on line. I have been following it closely because I will be designing and implementing a permissions system in the next couple months. I am finding the discussion very helpful.
Tracy Spratt Lariat Services Flex development bandwidth available ________________________________ From: flexcoders@yahoogroups.com [mailto:flexcod...@yahoogroups.com] On Behalf Of Paul Andrews Sent: Wednesday, January 21, 2009 5:08 AM To: flexcoders@yahoogroups.com Subject: Re: [flexcoders] Re: Roles Based UI Yes, though it's a refreshing change for a flexcoders thread to go beyond the problems of the mechanics of writing an application and include the wider issues. I sometimes think that given the convoluted use of flex we sometimes see, a broader view is sometimes beneficial. Paul ----- Original Message ----- From: Gregor Kiddie <mailto:gkid...@inpses.co.uk> To: flexcoders@yahoogroups.com <mailto:flexcoders@yahoogroups.com> Sent: Wednesday, January 21, 2009 9:57 AM Subject: RE: [flexcoders] Re: Roles Based UI I think this is a good candidate for taking offline huh ;) Gk. Gregor Kiddie Senior Developer INPS Tel: 01382 564343 Registered address: The Bread Factory, 1a Broughton Street, London SW8 3QJ Registered Number: 1788577 Registered in the UK Visit our Internet Web site at www.inps.co.uk <http://www.inps.co.uk> The information in this internet email is confidential and is intended solely for the addressee. Access, copying or re-use of information in it by anyone else is not authorised. Any views or opinions presented are solely those of the author and do not necessarily represent those of INPS or any of its affiliates. If you are not the intended recipient please contact is.helpd...@inps.co.uk ________________________________ From: flexcoders@yahoogroups.com [mailto:flexcod...@yahoogroups.com] On Behalf Of Paul Andrews Sent: 21 January 2009 09:53 To: flexcoders@yahoogroups.com Subject: Re: [flexcoders] Re: Roles Based UI Gregor, I just wanted to say that while I do believe that for role based applications (something beyond 'user' and 'admin') the approach I outlined is a good way to go, I fully understand that implementation of roles is down to a lot of considerations and not everyone has the time (or inclination) to separate roles from capabilities. In my case the client needed a sophisticated system that allowed administrators to assign and change roles and even grant/remove individual capabilities all within a security system controlling the scope for changes. These capabilities were held as part of the user data and the application did not take account of roles (except as a means of assigning capabilities). The developers did not assign or even define roles (except for the initial minimal roles). I'm not being a dictator - few clients want or need the sophistication that we built for that system. It was a great system (if I say so myself!). Paul ----- Original Message ----- From: Paul Andrews <mailto:p...@ipauland.com> To: flexcoders@yahoogroups.com <mailto:flexcoders@yahoogroups.com> Sent: Wednesday, January 21, 2009 9:18 AM Subject: Re: [flexcoders] Re: Roles Based UI The user capabilities should sit and be changeable by anyone who has the "userCapability("editCapability") or userCapability("editRole")". Doesn't matter if it's a third party or not. Roles should map to capabilities. The application is controlled by capabilities, not roles. By assigning a role (or roles) to a user, the administrator grants capabilties to a given user. So, your application is driven by capabilities and any (authourised) person can decide what role grants what capability. If you do this you can add and remove new roles, without having to change your application. Naturally, there's a bit more work to do with it and security and scope considerations to address. Paul ----- Original Message ----- From: Gregor Kiddie <mailto:gkid...@inpses.co.uk> To: flexcoders@yahoogroups.com <mailto:flexcoders@yahoogroups.com> Sent: Wednesday, January 21, 2009 9:07 AM Subject: RE: [flexcoders] Re: Roles Based UI Not if the user capabilities are set by a third party, which is the situation I dealing with. I suspect our situation is drastically more complicated than the Ops though! Gk. Gregor Kiddie Senior Developer INPS Tel: 01382 564343 Registered address: The Bread Factory, 1a Broughton Street, London SW8 3QJ Registered Number: 1788577 Registered in the UK Visit our Internet Web site at www.inps.co.uk <blocked::http://www.inps.co.uk/> The information in this internet email is confidential and is intended solely for the addressee. Access, copying or re-use of information in it by anyone else is not authorised. Any views or opinions presented are solely those of the author and do not necessarily represent those of INPS or any of its affiliates. If you are not the intended recipient please contact is.helpd...@inps.co.uk ________________________________ From: flexcoders@yahoogroups.com [mailto:flexcod...@yahoogroups.com] On Behalf Of Paul Andrews Sent: 21 January 2009 09:03 To: flexcoders@yahoogroups.com Subject: Re: [flexcoders] Re: Roles Based UI I think <mx:Button id="deleteItem" visible="{UserModel.getUserCapability(ItemTasks.DELETE)}" /> would be better. There should be no need for code such as "if ( _activities.include( _taskMapping[ task ] ) && configuration.taskAllowed( task ) ) {" . The user capabilities should be assigned by the role - once only. Paul ----- Original Message ----- From: Gregor Kiddie <mailto:gkid...@inpses.co.uk> To: flexcoders@yahoogroups.com <mailto:flexcoders@yahoogroups.com> Sent: Wednesday, January 21, 2009 8:41 AM Subject: RE: [flexcoders] Re: Roles Based UI hasPermission(...) is better than hasRole(...), but the reason we are moving towards the component mapping approach is that hasPermission(...) could end up returning something anomalous if your business logic gets complicated (which is where we lie). If it is as simple as ( some activity == true ) then hasPermission(...) works, but if the internal business logic gets expanded past role based access to include, for example system configuration (or even whether the user has paid for a particular feature), hasPermission(someActivity) may end up returning false, even if they DO have that activity. Not to mention again, by assigning activities to each of the components involved, you've exposed your authentication system to the rest of the application, which makes it harder to replace / swap. Corporate restrictions prevents me from posting any real code, but something like <mx:Button id="deleteItem" enabled="{UserModel.getUser(userKey).hasAccess(ItemTasks.DELETE)}" /> In User.as public function hasAccess( task : String ) { if ( _activities.include( _taskMapping[ task ] ) && configuration.taskAllowed( task ) ) { return true; } return false; } P.S. Ignore some of the more funky quirks in my code... There are a few hangovers there. And I do believe we are mainly arguing semantics at this point ;) Gk. Gregor Kiddie Senior Developer INPS Tel: 01382 564343 Registered address: The Bread Factory, 1a Broughton Street, London SW8 3QJ Registered Number: 1788577 Registered in the UK Visit our Internet Web site at www.inps.co.uk <blocked::http://www.inps.co.uk/> The information in this internet email is confidential and is intended solely for the addressee. Access, copying or re-use of information in it by anyone else is not authorised. Any views or opinions presented are solely those of the author and do not necessarily represent those of INPS or any of its affiliates. If you are not the intended recipient please contact is.helpd...@inps.co.uk ________________________________ From: flexcoders@yahoogroups.com [mailto:flexcod...@yahoogroups.com] On Behalf Of Yves Riel Sent: 20 January 2009 17:34 To: flexcoders@yahoogroups.com Subject: RE: [flexcoders] Re: Roles Based UI In our case, we use a similar scheme except that we have roles and permissions. It is the permission that defines the access to the component. If the user, in his role, has the permission set to true, then the user gain access to the component. It is very flexible as you can create many roles will similar or different permissions. At the end, you do not tie up the UI to a specific role but to a permission. E.g. <mx:Button id="btndelete1" enabled="User.hasPermission('CanDelete')" /> <mx:Button id="btndelete2" enabled="User.hasPermission('CanDelete')" /> <mx:Button id="btnAdd" enabled="User.hasPermission('CanAdd')" /> etc... You can see here that two buttons can be displayed using the same permission. ________________________________