Criação de Menu de Acesso
07/12/2012 15:42
0
Pessoal,

possuo uma aplicação com vários papeis. Para cada papel estou criando uma GSP com os acessos liberados e como são muitos isso dá muito trabalho e em quase todas as vezes acabo dando um control C e Control V incrementando apenas uma nova linha na GSP.

Estou achando muito arcaico essa maneira de montar o painel de menu das opções de acesso, assim queria saber o que vocês fazem para montar o painel de vocês?

Tags: painel menu


0
Grande amigo tudo bem?

Não sei se minha solução é a melhor, mas eu criei um dominio chamado Menu que contem o 1. Papel, 2. Link para o acesso e 3. descrição do acesso (para ajuda aos iniciantes).

para cada papel eu crio uma instância dessa classe e quando o usuario acessa o menu, faz uma busca nesta classe e manda renderizar as views.

Mas antes de implementar sugiro que veja as opções do pessoal do fórum.

Abraço...
07/12/2012 15:59


0
Eu uso assim:

Classes


Classe Usuario (nome, login, senha, grupo_id e etc)

// Os privilégios são os menus e outras opções que preciso controlar o acesso como por exemplo.
// menu cadastro, submenu cliente, opção imprimirFicha e assim por diante
Classe Privilegio (nome, descricao)

Classe Grupo (nome)

Classe GrupoPrivilegio (grupo_id, privilegio_id, visualizar, cadastrar, editar, excluir )



Lembrando que eu não uso o spring security, eu faço por um filter mesmo.

Quando o usuário loga, eu carrega na sessão o próprio usuário e um HashMap<String, Objeto> de grupoPrivilegios.
No layout principal eu criou os menus normalmente seguindo o desenho do layout que quero para meu site e em cada opção eu testo se o cara pode ver ou não.



// Menu
<ul>
<li class="titulo">
<ul>
<li class="subitem">Cliente</li>
<li class="subitem">Fornecedor</li>
</ul>
</li>
</ul>

// com as validações
<ul>
<g:if test="${session.privilegios.get('MENU_CADASTRO').visualizar == true}">
<li class="titulo">Cadastros
<ul>
<g:if test="${session.privilegios.get('CADASTRO_CLIENTE').visualizar == true}">
<li class="subitem">Cliente</li>
</g:if>
<g:if test="${session.privilegios.get('CADASTRO_FORNECEDOR').visualizar == true}">
<li class="subitem">Fornecedor</li>
</g:if>
</ul>
</li>
</ul>
</g:if>



Bem simples!
08/12/2012 11:56


0
Outra solução, é criar um template _menu, que será renderizado no layout padrão do site.

Ex:

<!-- MENU SE NÃO LOGADO -->
<nav>
<ul>
<li><g:link controller="home"action="index">Home</g:link></li>
</ul>
</nav>
</sec:ifNotLoggedIn>


<sec:ifAnyGranted roles="ROLE_ADMIN">
<!-- MENU SE LOGADO COMO ADMIN -->
<nav>
<ul>
<li> <a class="home" href="${createLink(uri: '/')}">Home</a></li>
<li> <g:link controller="usuario" action="list">Usuários</g:link> </li>
<li> <g:link controller="escala" action="escala" >Escala</g:link> </li>
</ul>
</nav>
</sec:ifAnyGranted>



No seu layout padrão(/layouts/main.gsp), vc inclui esse template.


...
<g:render template="/layouts/menu"/>
...


[list]
Vantagens:
[/list]
Concentra o menu em uma única página, facilita a manutenção.
Não há necessidade de acesso a base de dados para montar o menu.

[list]
Desvantagens:
[/list]
Se você não usar um template padrão, terá de fazer o include em muitas páginas diferentes.
10/12/2012 18:21



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto