Estrutura XML para Menu Dinâmico

E ai pessoal,

O assunto pode ser meio off-topic, mas… quem puder ajudar!

To criando um servlet que vai gerar um menu dinamicamente, dependendo do acesso (role) do usuário. Há a necessidade de usarmos um link diferente para cada tipo de acesso do user, além de suportar sub itens. Eu pensei na seguitne estrutura XML:

<menu>
  <menu-item>
    <label>Catalog</label>
    <authorization>
      <role>*</role>
    </authorization>

    <menu-item>
      <label>Institution</label>
      <item-action>
        <action>/dirA/dirB/I2LogiCatalogServlet</action>
        <role>*</role>
      </item-action>
      
      <authorization>
        <role>manager</role>
        <role>staff</role>
      </authorization>
    </menu-item>
    
    <menu-item>
      <label>Products</label>
      <item-action>
        <action>/dirA/dirB/I2LogiCatalogServlet</action>
        <role>*</role>
      </item-action>
    </menu-item>
    
    <menu-item>
      <label>Groups & Classes</label>
      <item-action>
        <action>/dirA/dirB/I2LogiCatalogServlet</action>
        <role>manager</role>
      </item-action>
    </menu-item>
  </menu-item>

  <menu-item>
    <label>Price History</label>
    <authorization>
      <role>*</role>
    </authorization>

    <item-action>
      <action>/dirA/dirB/I2LogiProcurementServlet</action>
      <role>manager</role>
    </item-action>
    <item-action>
      <action>/dirA/dirB/I2LogiProcurementServlet2</action>
      <role>staff</role>
    </item-action>
  </menu-item>
</menu>

Onde:

[code]<menu> - elemento root

<menu-item> - item do menu
<label> - label do menu a ser mostrado
<authorizarion> - autorizacao do item do menu
<role> - role com permissao (visualizar o item do menu)
<item-action> - contem a action e a role para o item do menu
<action> - action executada no item do menu
<role> - role da action[/code]

/** neste ponto eu pretendo ter um item de para cada action diferente para cada role **/

Alguem tem alguma ideia melhor de como estrturar este XML?

Lembre-se que:

  • deve conter acesso autorizado definido para cada usuário (roles)
  • e a action de cada item do menu é definida pela role do usuário
  • e itens podem ter sub-itens (eu seguiria mesm estrutura de <menu-item> dentro de um elemento <menu-item> para definir um su-item.

Valeu galera
Abraços

Há várias maneiras de se implementar controle de acesso. Certamente cada um aqui vai lhe dar uma proposta diferente de implementação. Pois bem, há uma implementação baseada em um padrão XML chamada XACML e pode ser vista aqui: http://developer.java.sun.com/developer/technicalArticles/Security/xacml/xacml.html

Se faler da forma meio estruturada do xml é uma boa.
Porem voce também pode usar 1 formato ‘flattened’:

&lt;menu&gt;
    &lt;menu-item id=&quot;root_item&quot;&gt;
                ...
   &lt;/menu-item&gt;

    &lt;menu-item id=&quot;item1&quot; parent=&quot;root_item&quot;&gt;
                ...
   &lt;/menu-item&gt;

    &lt;menu-item id=&quot;item1.1&quot; parent=&quot;item1&quot;&gt;
                ...
   &lt;/menu-item&gt;
   ...
&lt;/menu&gt;

Escolher entre um dos dois é uma mera questão de gosto e da ferramenta que vai converter de xml para dhtml. Com XSLT o mais pratico seria utilizando tags ‘id’ no menus, não que XSLT seja pratico…[/code]