An interesting idea.

I haven't got time to experiment, but here are some thoughts.

There's two approacheas as I see it - 'outside in', or 'inside'.

'inside' would mean adding a call to a security object inside the custom object 
to inspect the security parameters and 'detach' any components nested inside 
the custom component.

'outside-in' would be similar to the 'inside' approach but with one call at the 
application level, which investigates all children for the security settings of 
each component and recursively descends into components if they satisfy the 
security settings and 'detach' those that don't.

It's not as easy as simply building a html page on the fly, because you can't 
completely detach components. For example, your application might have a login 
component sitting on the layout and for arguments sake there's a 'save' 
component that will appear after login if the user has the right security 
settings. So initially, with no user logged in, the save button can't appear, 
but cannot be permamently removed either. Once the user has logged in we need 
to make the button appear if the security settings are right. Similarly when 
the user logs out, it goes again. Unlike an html page which is refreshed, an 
instance of a Flex component may remain throughout the life of the application. 
It's not possible to 'lose' these optional components completely - hence the 
'detach'.  You can partially get what you want by making these custom component 
invisible and taking them out of the layout, but potentially there's another 
problem perhaps - what if a custom component is doing some processing and not 
just sitting on the layout?

Whenever the security status changes it will be necessary to trigger a new 
traversal of the application component tree to decide which components are 
visible or not.

The Flex traditional way to do this kind of thing would be using states. Your 
security-aware components could implement the correct states to adjust to the 
security settings just by switching states - this would probably give you what 
you want with the security component updating states rather than directly 
manipulating components.

Hope that helps.

Paul
----- Original Message ----- 
  From: cool.king08 
  To: [email protected] 
  Sent: Sunday, January 27, 2008 5:04 PM
  Subject: [flexcoders] Role based rendoring of MXML components - visibility 
and editability


  Hi
  I need some help regarding role based access control mechanism at the view 
level i.e on flex components. 

  My requirement is simple  - I have flex page which has many controls like 
buttons, combox, textinput etc. The users who access the page are grouped by 
roles. I want limit access to components in the page. For example the 'Save' 
button should be VISIBLE to a user with role 'ADMIN'. Another use case is a 
combobox components should only be EDITABLE by a user with role 'ADMIN or 
SUPER'. This could be more advanced; for example instead of controlling just 
one component, we could control a block of MXML code like:

  <custom:Authorize visible="ADMIN|SUPER"  editable="SOMEUSER">
     <mx:Button name="Save" />
     <mx:Combobox name="Users" />
  </custom:Authorize>

  (ofcourse visible attribute takes priority over editable attribute). Again 
the features of such a robust view layer security can be limitless. For example 
the above code just shows UI Controls. It could have a mix of layout 
components, custom UI components, and UI Controls. It could also support 
wildcards like | (or), & (and), !(not). This is a common requirement in 
intranet applications where there are many different types of business users 
demarcated by roles. This type of components also reduces code duplication. For 
example a flex page can be shown in VIEW_ONLY mode as well as EDIT mode based 
on the user role instead of writing two different flex pages.  

  My mid tier has J2EE with spring + acegi. Acegi has a cool JSP tag library 
<authz:authorize>which does a similar thing - 

  <authz:authorize ifAllGranted="ROLE_VIP, ROLE_GUEST">
      Welcome USER
     <a href="...">Logoff</a>
  </authz:authorize>

   I know flex doesnt have any such out-of-the-box component/functionality. Is 
there anything out there which does something similar? I have some ideas of how 
this can be implemented but if you can give some ideas it will always help.
  Thanks
   

Reply via email to