Bom dia.
Estou com problemas para resolver uma questão de permissões.
Em nossa aplicação o login do sistema pode assumir tem 2 papéis(Administrador ou Cliente), porem a camada de visualização é a mesma para ambos, mudando apenas o layout da pagina conforme as necessidades do papel.
O problema que estamos tendo é que os Managed Bean estão extremamente bagunçados verificando as permissões do login e retornando a consulta conforme as necessidades. Achamos que ficaria melhor arquitetado se tivéssemos algo como o exemplo abaixo:
public interface ConcultaMBean{
public List consultaContasPagas();
}
public class AdministradorConsultaMBean implements ConcultaMBean{
public List consultaContasPagas(){
List list = new LinkedList();
list.add(new Conta("A"));
list.add(new Conta("B"));
list.add(new Conta("C"));
return list;
}
}
public class ClienteConsultaMBean implements ConcultaMBean{
public List consultaContasPagas(){
List list = new LinkedList();
list.add(new Conta("A",1200));
list.add(new Conta("B",1220));
list.add(new Conta("C",1300));
return list;
}
}
O problema dessa solução está em como definir qual Managed Bean será usado no jsf, particularmente gostaríamos de ter algo semelhante ao código abaixo.
<html>
...
<h:dataTable value="#{concultaMBean.consultaContasPagas}" var="clientPhone">
...
</h:dataTable>
...
</html>
O problema é que o concultaMBean é uma interface, não consegui identificar aonde eu poderia colocar uma Fabrica para escolher qual implementação deve ser carregada.
Alguém tem uma idéia de como resolver ou uma solução mais inteligente.
Desde já obrigado.