Spring Security + Menu dinâmico JSF

E ae galera,

Estou trabalhando a parte de segurança de minha infra. Depois de uma pesquisada vi que o Spring Security parece ser algo interessante, até mesmo porque minha aplicação esta usando o Spring. O problema, é que o meu Menu é dinâico, ou seja, vem tudo do banco.

Sendo assim como vou controlar minhas ROLES utilizando a anotação dele:


<sec:ifAnyGranted roles="ROLE_ADMINISTRADOR, ROLE_GESTOR"> 
Menu...
</sec:ifAnyGranted> 

Aqui está o meu menu:

    <div class="headerContentCenter">
      <p:menubar id="menuPrincipal"  model="#{menuController.menuModel}"/>
    </div>

Amigo, eu tambem utilizo em meus projetos o Spring Secutiry, mas… quando faço meu menu dinamico com informações do banco, tenho um MB que contem todas as permissoes do usuario, e as coloco no Rendered dos meus atributos, ou em algum outro tipo de controle. Tendesse?

darksteel3000 você que trabalha com menu dinâmico já se deparou com um probleminha desse ?

http://www.guj.com.br/java/298041-tamanho-do-submenu-e-menuitem---primefaces

lembrando que você trabalha com menu dinamico sem o uso do spring, é só usar consulta normal do banco, carregar uma lista e fazer a mágica rs.

E ae Valeio, valeu pela participação. Abri o link que você passou, eu acho que nesse caso teria dois caminhos a seguir,
ou limitar os caracteres no banco de dados ou trabalhar no CSS do componente aumentando a largura de seu menu.

Pode ser que você já tentou isso, mas assim, esses seriam os caminhos que eu pensaria em seguir.

E ae darksteel3000, sim deu para entender.
Eu dei uma pesquisada aqui, seria algo do tipo dar um setRenderedType([sintaxe ROLE]) no menu quando crio ele dinamicamente no MB?

aprendiz.devel obrigado pela resposta. Já está limitado no banco em 30 caracteres e menos que isso não quero botar rs. Sobre mudar o css do componente, como faço isso ?

na verdade tem como posta o css aumento o campo do SubMenu e MenuItem e como alterar no meu xhtml, pq de css eu não entendo quase nada rs.

Da pra criar um arquivo do tipo CSS no projeto WEB e referenciar ele na página do menu, ficaria algo assim:

  <h:head>
    <link type="text/css" rel="stylesheet" href="#{request.contextPath}/resources/theme/css/arquivo.css" />
  </h:head>

Aí depois, dentro do CSS você define novas regras para o seu componente, algo assim:


.styleMenuTransparent{
  background-color: transparent !important;  /* cor de fundo */
  background: transparent!important;  /* cor de fundo*/
  border: transparent!important; /* bordas*/
  color: white; /* cor do texto */

/*aqui você coloca uma regra para aumentar a largura do seu componente*/
}

Aí no seu componente você só referencia aquela classe criada no CSS, assim:

 <p:menubar id="menuPrincipal"  model="#{menuController.menuModel}" styleClass="styleMenuTransparent" autoDisplay="false"/>

Já adiantando, é um pouco complicadinho acertar as alterações no CSS, tem que abrir pelo chrome ou firebug e identificar o componente certo que tem que ser alterado. Em alguns casos sobrescrever o CSS, algo assim:

.styleMenuTransparent .ui-widget-content .ui-menuitem-text{
  color: black!important; /* cores submenus preta*/
}

Espero ter ajudado amigo.

Verei, quero ver é eu acertar o atributo do componente rsrs.

Fiz um teste aqui, você utiliza o menuBar, certo?
Faz assim, cria o arquivo CSS e referencia ele na sua página que está o menu, igual eu mostrei ali em cima. Então adiciona isso no CSS

.styleMenuNovo .ui-widget-content{
  width: 250px!important;
}

No seu menu, adiciona styleClass=“styleMenuNovo”, assim:

<p:menubar id="menuPrincipal"  model="#{menuController.menuModel}" styleClass="styleMenuNovo" autoDisplay="false"/>

Aqui funcionou, ele aumentou a largura do menu.

Acho q ja foi solucionado. :slight_smile:

Vou ver em casa hoje meio dia, ontem não deu pra fazer a noite. Mais tarde posto o resultado.

Funcionou!! Muito obrigado, você é o cara rsrs :smiley:

Olá amigos, gostaria de pedir a ajuda para vcs… Estou com o mesmo problema do Valeio Bezerra, testei aqui o que o aprendiz.devel disse e funcionou!!!

Porém, eu gostaria de saber se seria possivel eu fazer isso apenas para um submenu, ou restringir, de acordo com o tamanho da label do item do menu.

Por exemplo, no meu menubar, tenho um submenu com alguns menuitens grandes, o que faz eu precisar aumentar a largura dele… porém, no mesmo menubar, tenho submenus com menuitens curtos, dai ele fica enorme, sobrando um grande espaço em branco.

Tem como fazer isso?
Agradeço desde já!!

[quote=pcsantana]Olá amigos, gostaria de pedir a ajuda para vcs… Estou com o mesmo problema do Valeio Bezerra, testei aqui o que o aprendiz.devel disse e funcionou!!!

Porém, eu gostaria de saber se seria possivel eu fazer isso apenas para um submenu, ou restringir, de acordo com o tamanho da label do item do menu.

Por exemplo, no meu menubar, tenho um submenu com alguns menuitens grandes, o que faz eu precisar aumentar a largura dele… porém, no mesmo menubar, tenho submenus com menuitens curtos, dai ele fica enorme, sobrando um grande espaço em branco.

Tem como fazer isso?
Agradeço desde já!![/quote]

Olá pcsantana, você utiliza menu dinâmico? Se não utilizar, basta fazer o mesmo para o submenu que quer alterar o tamanho. Utilize o firefox ou chrome para identificar o CSS do componente que define o tamanho, sobrescreva ele em seu arquivo CSS e chame ele no seu componente com o styleclass, isso deve resolver.