Você está na página 1de 4

/*

* To change this template, choose Tools | Templates


* and open the template in the editor.
*/
package br.unir.util;
import br.unir.siex.model.PerfilAcesso;
import br.unir.siex.model.Pessoa;
import
import
import
import
import
import
import
import
import

java.util.Arrays;
javax.faces.application.FacesMessage;
javax.faces.application.NavigationHandler;
javax.faces.context.FacesContext;
javax.faces.event.PhaseEvent;
javax.faces.event.PhaseId;
javax.faces.event.PhaseListener;
javax.persistence.criteria.CriteriaBuilder;
javax.servlet.http.HttpSession;

public class SecurityPhaseListener implements PhaseListener {


private String[] pageProponente = { "/index.html","/login.xhtml", "/proposta
/acao.xhtml", "/proposta/acaoModal.xhtml", "/proposta/index.xhtml",
"/proposta/avaliacao.xhtml", "/proposta/caracteristicas.xhtml", "/pr
oposta/caracterizacaoProposta.xhtml",
"/proposta/cronogramaExecucao.xhtml", "/proposta/divulgacao.xhtml",
"/proposta/identificacaoGeral.xhtml",
"/proposta/index.xhtml", "/proposta/infraEstrutura.xhtml", "/propost
a/Lista.xhtml",
"/proposta/MenuAcao.xhtml", "proposta/menuPrincipal.xhtml", "/propos
ta/minhasAcoes.xhtml",
"/proposta/modalCadEquipeExecutora.xhtml", "/proposta/objetivos.xhtm
l", "/proposta/orcamento.xhtml",
"/proposta/parceriaExterna.xhtml", "proposta/participante.xhtml", "/
proposta/programa.xhtml",
"/proposta/publicoAlvo.xhtml", "/proposta/transparenciaAcoes.xhtml"}
;
private String[] pageParticipante = {"/proposta/transparenciaAcoes.xhtml","/
proposta/acao.xhtml", "/login.xhtml","/proposta/index.xhtml"};
private String[] pageAdministrador = {"/proposta/index.xhtml","/login.xhtml"
, "/Inicio.xhtml","/proposta/acao.xhtml", "/proposta/acaoModal.xhtml",
"/proposta/avaliacao.xhtml", "proposta/caracteristicas.xhtml", "prop
osta/caracterizacaoProposta.xhtml",
"/proposta/cronogramaExecucao.xhtml", "/proposta/divulgacao.xhtml",
"/proposta/identificacaoGeral.xhtml",
"/proposta/index.xhtml", "proposta/infraEstrutura.xhtml", "proposta/
Lista.xhtml",
"/proposta/MenuAcao.xhtml", "proposta/menuPrincipal.xhtml", "propost
a/minhasAcoes.xhtml",
"/proposta/modalCadEquipeExecutora.xhtml", "proposta/objetivos.xhtml
", "/proposta/orcamento.xhtml",
"/proposta/parceriaExterna.xhtml", "proposta/participante.xhtml", "/
proposta/programa.xhtml",
"/proposta/publicoAlvo.xhtml", "/proposta/transparenciaAcoes.xhtml",
"/perfil.xhtml",
"/Dicionario/areaTematica.xhtml", "/Dicionario/cadastroPessoa.xhtml"
, "/Dicionario/campus.xhtml",

"/Dicionario/linhaExtensao.xhtml", "/Dicionario/meioDivulgacao.xhtml
", "/Dicionario/modalidade.xhtml", "/Dicionario/participacao.xhtml",
"/Dicionario/perfilAcesso.xhtml", "/Dicionario/pessoa.xhtml", "/prop
osta/lista-todas-acoes.xhtml" };
private String[] pageProreitor = {"/login.xhtml", "/proposta/acao.xhtml", "/
proposta/acaoModal.xhtml", "/proposta/index.xhtml",
"/proposta/avaliacao.xhtml", "/proposta/caracteristicas.xhtml", "/pr
oposta/caracterizacaoProposta.xhtml",
"/proposta/cronogramaExecucao.xhtml", "/proposta/divulgacao.xhtml",
"/proposta/identificacaoGeral.xhtml",
"/proposta/index.xhtml", "/proposta/infraEstrutura.xhtml", "/propost
a/Lista.xhtml",
"/proposta/MenuAcao.xhtml", "proposta/menuPrincipal.xhtml", "/propos
ta/minhasAcoes.xhtml",
"/proposta/modalCadEquipeExecutora.xhtml", "/proposta/objetivos.xhtm
l", "/proposta/orcamento.xhtml",
"/proposta/parceriaExterna.xhtml", "proposta/participante.xhtml", "/
proposta/programa.xhtml",
"/proposta/publicoAlvo.xhtml", "/proposta/transparenciaAcoes.xhtml"}
;
private String[] pageAuditor = {"/login.xhtml", "/proposta/minhasAcoes.xhtml
", "/proposta/acao.xhtml","/proposta/transparenciaAcoes.xhtml",
"/proposta/index.xhtml"};
@Override
public void afterPhase(PhaseEvent event) {
FacesContext facesContext = event.getFacesContext();
//String currentPage = facesContext.getViewRoot().getViewId().replace("/
", "");
String currentPage = facesContext.getViewRoot().getViewId();
boolean isLoginPage = ((currentPage.lastIndexOf("login.xhtml") > -1) ||
(currentPage.lastIndexOf("transparencia.xhtml") > -1));
final int ADMINISTRADOR = 1, PROPONENTE = 3, PARTICIPANTE = 5, PRO_REITO
R = 2, AUDITOR = 4;
// Verifica Autorizao da pgina solicitada ao perfil corrente
boolean permitirProponente = Arrays.asList(pageProponente).contains(curr
entPage);
boolean permitirAdministrador = Arrays.asList(pageAdministrador).contain
s(currentPage);
boolean permitirParticipante = Arrays.asList(pageParticipante).contains(
currentPage);
boolean permitirProreitor = Arrays.asList(pageProreitor).contains(curren
tPage);
boolean permitirAuditor = Arrays.asList(pageAuditor).contains(currentPag
e);
//Verifica se h sesso aberta
HttpSession session = (HttpSession) facesContext.getExternalContext().ge
tSession(true);
//Caso haja sesso corrente recupera o objeto 'usurio' da sesso
Object currentUser = session.getAttribute("user");
Object perfilUsuario = session.getAttribute("perfilAcesso");
System.out.println("TESTE "+currentUser+ " "+perfilUsuario);
Pessoa p = (Pessoa) currentUser;

PerfilAcesso pa = (PerfilAcesso) perfilUsuario;


System.out.println("ATENO! passando pelo SecurityPahseListener.....");
if(currentUser != null){
System.out.println("Existe usurio na sesso "+currentPage.toString());
System.out.println("Existe perfil na sesso "+perfilUsuario.toString()
);
}
// Caso a condio: a pgina de login? caso seja true, existe usurio na sesso?
if (!isLoginPage && currentUser == null) {
System.out.println("Usurio nao autenticado!!!!.....");
NavigationHandler nh = facesContext.getApplication().getNavigationHa
ndler();
nh.handleNavigation(facesContext, null, "login");
} else {
if (!isLoginPage && pa != null) {
switch (pa.getNivelAcesso().getId().intValue()){
case ADMINISTRADOR:{
if(!permitirAdministrador)
proibir(facesContext);
System.out.println("ADMINISTRADOR! Usurio "+p.getNome
()+" autenticada com o perfil "+pa.getNivelAcesso().getDescricao());
System.out.println("Usurio no tem autorizao para esta te
la!!!!! ... ");
//System.out.println("ADMINISTRADOR "+p.getNome()+" aute
nticada com o perfil "+pa.getNivelAcesso().getDescricao());
}break;
case PROPONENTE:{
if(!permitirProponente)
proibir(facesContext);
System.out.println("PROPONENTE! Usurio "+p.getNome()+" au
tenticada com o perfil "+pa.getNivelAcesso().getDescricao());
System.out.println("Usurio no tem autorizao para esta tela!!
!!! ... ");
}break;
case PRO_REITOR:{
if(!permitirProreitor)
proibir(facesContext);
System.out.println("PRO-REITOR! Usurio "+p.getNome()+" au
tenticada com o perfil "+pa.getNivelAcesso().getDescricao());
System.out.println("Usurio no tem autorizao para esta tela!!
!!! ... ");
}break;
case AUDITOR:{
if (!permitirAuditor)
proibir(facesContext);
System.out.println("AUDITOR! Usurio "+p.getNome()+" auten
ticada com o perfil "+pa.getNivelAcesso().getDescricao());

System.out.println("Usurio no tem autorizao para esta tela!!


!!! ... ");
}break;
case PARTICIPANTE:{
if (!permitirParticipante)
proibir(facesContext);
System.out.println("PARTICIPANTE! Usurio "+p.getNome()+"
autenticada com o perfil "+pa.getNivelAcesso().getDescricao());
System.out.println("Usurio no tem autorizao para esta tela!!
!!! ... ");
}break;
default:{
System.out.println("DEFAULT! Usurio "+p.getNome()+" auten
ticada com o perfil "+pa.getNivelAcesso().getDescricao());
}
}
}
}
}
private void proibir(FacesContext facesContext){
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Pgin
a no autorizada."));
NavigationHandler nh = facesContext.getApplication().getNavigationHandle
r();
nh.handleNavigation(facesContext, null, "/proposta/transparenciaAcoes?fa
ces-redirect=true");
}
@Override
public void beforePhase(PhaseEvent event) {
}
@Override
public PhaseId getPhaseId() {
return PhaseId.RESTORE_VIEW;
}
}

Você também pode gostar