Boa noite a todos(as), estou fazendo uma aplicação Java Web, usando o framework PrimeFaces, Eu consegui autenticar o usuario, porém não estou conseguindo criar permissoes de usuario, Gostaria que pelo atributo função ao selecionar administrador, esse usuario terá todas opções ou aparecerá nop menu as opções do menu para cadastrar,
Minha classe autorizador
package com.controleestoque.listener;
import javax.faces.application.NavigationHandler;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import com.controleestoque.mb.LoginBean;
public class Autorizador implements PhaseListener {
public void beforePhase(PhaseEvent event) {
}
public void afterPhase(PhaseEvent event) {
FacesContext context = event.getFacesContext();
if ("/login.xhtml".equals(context.getViewRoot().getViewId())) {
return;
}
// Obtendo LoginBean da sessão
LoginBean loginBean = context.getApplication().evaluateExpressionGet(context, "#{loginBean}", LoginBean.class);
if (!loginBean.isUsuarioLogado()) {
NavigationHandler handler = context.getApplication().getNavigationHandler();
handler.handleNavigation(context, null, "login?facesredirect=true");
context.renderResponse();
}
}
public PhaseId getPhaseId() {
return PhaseId.RESTORE_VIEW;
}
}
Classe usuarioDAO
package com.controleestoque.dao;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import com.controleestoque.modelo.Usuario;
public class UsuarioDAO {
public boolean existe(Usuario usuario) {
EntityManager em = new JPAUtil().getEntityManager();
em.getTransaction().begin();
Query query = em.createQuery("from Usuario u where u.login = :pLogin and u.senha = :pSenha");
query.setParameter("pLogin", usuario.getLogin());
query.setParameter("pSenha", usuario.getSenha());
boolean encontrado = !query.getResultList().isEmpty();
em.getTransaction().commit();
em.close();
return encontrado;
}
}
Minha classe Login Bean
package com.controleestoque.mb;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import com.controleestoque.dao.UsuarioDAO;
import com.controleestoque.modelo.Usuario;
@SessionScoped
@ManagedBean
public class LoginBean {
private Usuario usuario = new Usuario();
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public String efetuaLogin() {
UsuarioDAO dao = new UsuarioDAO();
boolean loginValido = dao.existe(this.usuario);
if (loginValido) {
return "baixa?faces-redirect=true";
} else {
this.usuario = new Usuario();
return "login?faces-redirect=true";
}
}
public boolean isUsuarioLogado() {
return usuario.getLogin() != null;
}
public String logout() {
usuario = new Usuario();
return "login?faces-redirect=true";
}
}
O meu usuario Bean
package com.controleestoque.mb;
import java.util.List;
import javax.faces.application.Application;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import com.controleestoque.dao.DAO;
import com.controleestoque.modelo.Funcionario;
import com.controleestoque.modelo.Item;
import com.controleestoque.modelo.Produto;
import com.controleestoque.modelo.Usuario;
@ViewScoped
@ManagedBean
public class UsuarioBean {
private Usuario usuario = new Usuario();
private List<Usuario> usuarios;
public Usuario getUsuario() {
return this.usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public void refresh() {
FacesContext context = FacesContext.getCurrentInstance();
Application application = context.getApplication();
javax.faces.application.ViewHandler viewHandler = application.getViewHandler();
UIViewRoot viewRoot = viewHandler.createView(context, context.getViewRoot().getViewId());
context.setViewRoot(viewRoot);
context.renderResponse();
}
public void grava() {
DAO<Usuario> dao = new DAO<Usuario>(Usuario.class);
if (usuario.getId() == null) {
dao.adiciona(usuario);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Usuario foi cadastrado com sucesso!"));
} else {
dao.atualiza(usuario);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Usuario foi atualizado com sucesso!"));
}
this.usuario = new Usuario();
this.usuarios = dao.listaTodos();
}
public List<Usuario> getUsuarios() {
if (usuarios == null) {
System.out.println("Carregando usuarios...");
usuarios = new DAO<Usuario>(Usuario.class).listaTodos();
}
return usuarios;
}
public void remove(Usuario usuario) {
DAO<Usuario> dao = new DAO<Usuario>(Usuario.class);
dao.remove(usuario);
this.usuarios = dao.listaTodos();
refresh();
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Usuario foi removido com sucesso!"));
}
public void cancela() {
this.usuario = new Usuario();
}
}
Minha classe usuario
package com.controleestoque.modelo;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
@Entity
public class Usuario {
@Id
@SequenceGenerator(
name = "usuario_id", sequenceName = "usuario_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "usuario_id")
private Long id;
@Column(unique = true)
private String login;
private String senha;
private String funcao;
// getters e setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public String getFuncao() {
return funcao;
}
public void setFuncao(String funcao) {
this.funcao = funcao;
}
}
Meu html da tela de login
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
>
<ui:composition template="/_template.xhtml">
<ui:define name="corpo">
<h2>Login no sistema</h2>
<h:form id="formlogin">
. <fieldset>
<legend>Dados do Login</legend>
<h:outputLabel value="Login:" />
<p:inputText value="#{loginBean.usuario.login}" />
<h:outputLabel value="Senha:" />
<p:keyboard password="true" id="senha" value="#{loginBean.usuario.senha}" />
<h:commandButton value="Efetuar Login"
action="#{loginBean.efetuaLogin}" />
</fieldset>
</h:form>
</ui:define>
</ui:composition>
</html>
Meu html para cadastro de usuario
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<ui:composition template="/_template.xhtml">
<ui:define name="corpo">
<h:form id="cadastro">
<p:tabView>
<p:tab title="Cadastrar Usuario">
<p:fieldset legend="Dados do Usuario>
<h:outputLabel value="Nome:" for="nome" />
<p:inputMask value="#{usuarioBean.usuario.login}">
</p:inputMask>
<h:outputLabel value="Senha:" for="senha" />
<p:inputMask value="#{usuarioBean.usuario.senha}">
</p:inputMask>
<h:outputLabel value="Função" for="funcao" />
<p:selectOneMenu id="funcao" value="#{usuarioBean.usuario.funcao}">
<f:selectItem itemLabel="Vendedor" itemValue="Vendedor">
</f:selectItem>
<f:selectItem itemLabel="Administrador" itemValue="Administrador">
</f:selectItem>
</p:selectOneMenu>
<table border="0">
<tr>
<td><h:commandButton value="Gravar"
action="#{usuarioBean.grava}">
<f:ajax execute="@form" render=":lista :cadastro" />
</h:commandButton></td>
<td><h:commandButton value="Cancelar"
rendered="#{not empty usuarioBean.usuario.id}"
action="#{usuarioBean.cancela}"></h:commandButton></td>
</tr>
</table>
</p:fieldset>
</p:tab>
</p:tabView>
<h:messages />
</h:form>
<h:form id="lista">
</h:form>
</ui:define>
</ui:composition>
</html>