Controle de acesso e permissão - JSF

Bom dia galera!

Seguinte, to com um projetinho de CRUD pra gerenciar docentes e cursos de uma facul usando jsf+primefaces+jpa. Meu problema é o seguinte:

Existem os usuarios que são os cordenadores dos cursos e os usuarios que são funcionarios. Os funcionarios tem acesso a lista de todos os cursos cadastrados na base, porém os cordenadores só podem visualizar os dados do curso dele.

Exemplo: Usuario normal abre a tela do crud e ve um datatable mostrando todos os cursos. Já um cordenador ve um datatable mostrando apenas o curso atribuido a ele.
Como eu faço pra restringir esse tipo de acesso a um usuario?

Se você utiliza um servidor de aplicações Java EE full recomendo usar o JAAS, caso utilize um servlet container use o Spring Security

Utilizo Apache Tomcat aix!

Apache Tomcat é um servlet container :wink:

Você teria um exemplo pratico usando os recursos iguais aos meus?

nao sei se entendi muito bem, mas suponho que os usuarios coordenadores e os usuarios funcionario tenham um login e senha, sendo assim, vc poderia criar um campo no banco de dados com um nome
’permissao’ e os valores poderiam ser numeros, ex: permissao = 1, permissao = 2, sendo assim, quando qualquer usuario logar,a depender do numero de permissao que ele foi cadastrado, vc decide oq ele podera vizualizar, espero ter ajudado

< p:dataTable id="dataTableUsuarioNormal rendered="#{meuManagedBean.isUsuarioNormal}" />

< p:dataTable id=“dataTableCoordenador` rendered=”#{ ! meuManagedBean.isUsuarioNormal}" />

no managed bean

private boolean usuarioNormal;

// gere os getters e setters

public boolean isUsuarioNormal( ){
Pessoa p =(Pessoa)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(“usuarioLogado”);
return (p instance of Usuario);
}

Obs.:

Nesse exemplo defino Pessoa como classe “pai” e Usuario e Coordenador como classes filhas;

Ao fazer o login vc deverá colocar o usuário na sessão, pois o mesmo deverá ser recuperado e identificado, com isso vc poderá renderizar os componentes da página de acordo com o perfil

FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put(“usuarioLogado”, pessoa);

Sugiro fazer como o @aix falou usando Spring Security. Ai sim você vai ter garantir isso. Tem varios tutoriais por ai, só pesquisar por JSF + Spring Security.

Utilize o Apache Shiro se você está usando um Servlet container.

O lance é você usar um DataSource pq o apache shiro não será gerenciado pelo container do JSF ou do CDI.