Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

sobre autorização do sistema

Boa tarde semana passada estava vendo com o Samir que é um moderador aqui, que me ajudou muitoooo na questão de autorização com o phaseListener, mais eu dei uma olhada em um programa do meu amigo e ele fez um cadastro de página do sistema dele com o banco de dados e abria uma tela de permissão pelo qual ele podia acessar, eu achei muito elegante e queria implementar no meu sistema, alguem por favor me auxila para pode fazer isso? Algum post que aborda esse assunto ou video, quaaaalquer coisa

7 respostas

Fala Alisson, blz?

Pra fazer isso daí, o seu PhaseListener vai ter que consultar no banco de dados a página acessada e ver quais permissões que ela tem. Aí vc compara com a permissão do seu usuário e deixa ele passar ou manda ele pra outra página conforme o acesso dele. Não muda muito do que a gnt fez antes, a diferença é que no seu if vai ter que considerar a página e as permissões dela.

Espero ter ajudado =).

Oi Samir primeiramente muito obrigado por sempre estar me ajudando.

Samir mais o dele tinha o cadastro da pagina html no banco de dados sabe? Ele cadastro todas as paginas html dele no banco de dados.

Depois ele abriu o sistema e me mostrou uma pagina só das telas cadastradas e o nivel de acesso que o cara tinha na página, pelo phaseListener é possivel? E mais uma vez muito obrigado por sempre me ajudar... Já apreendi bastante coisinhas com você explicando kkk.

Fala Alisson!! cara, é sempre um prazer ajudar!

Então, não da pra criar autorização só pelo Banco. O que provavelmente ele fez foi criar uma entidade para as páginas. Essa página vai ter como atributos o nome da página e um Enum de permissão(o mesmo que vc usa no PhaseListener). No Phase Listener vc válida a página e o acesso dela, sacou? Você precisa usar um validador, independente de qual for (PhaseListener, JaaS, Filtro) para ver se o acesso do banco é o mesmo do usuário. O que seu amigo deve ter feito foi uma interface para deixar mais fácil esse controle, fazendo pelo próprio sistema.

Tamo junto e continue postando suas dúvidas =)

Opa mais valeu mesmo pela atenção Samir!!!

Então, eu pedi para ver no banco de dados a relação dele, ele criou uma tabela chamada página, nessa página ele passou uma coluna chamada caminho, que seria o caminho das páginas, algo como paginas/produto.xhtml, uma coluna como nome, seria o nome da pagina, produto.xhtml, e um campo boolean que daria true ou false. Depois ele criou uma outra tabela que acessoPagina, que recebia o id_pagina e o id_acesso.

Que seria as chaves estrangeiras da tabela pagina e do nivel de acesso.

Ah bacana Samir, então de todo modo tem que ter um autorizador sejá lá oque for, filter phaseListener JaaS, mais tem que ter configuração no java né? Oque achei interessante é que ele abriu a página lá e deu acesso pro usúario pela pagina kkkk.

Vou tentar implementar isso aqui, irei fazer em um sistema teste para não dar pal no principal kkkk.

Será que eu acho algo post na net ensinando Samir? Andei pesquisando e não achei nada :(

puts, não achei nada a respeito também, rs. Mas vai tentando que com a lógica vc consegue. É só validar no PhaseListener qual o acesso na tabela das páginas. Alias, eu nem faria a tabela acesso página, Faria apenas a página com uma coluna de acesso. Essa coluna de acesso teria um Enum com os mesmos valores que o acesso do usuário.

Perfeito! Irei tentando aqui então, vou seguir do seu jeito, Então irei criar minha tabela pagina com o caminho da pagina o nome da pagina e irei ligar minha enum que está em uma tabela nessa tabela? Algo como.

public class Pagina {

    private Long codigo;
    private String caminho;
    private String nome;
    @manytoone
    private NivelAcesso nivelAcesso = new NivelAcesso();
}

mais ou menos assim né?

solução!

Isso!! mas o Nivel de Acesso pode ser um Enum dessa forma NivelAcesso não precisa ser uma entidade, sempre vai ter valor fixo e vc não vai precisar tratar nenhum relacionamento.

public enum NivelAcesso {
   NORMAL, ADM, MASTER; //coloca os nomes dos seus acessos =)
}
public class Pagina {

    private Long codigo;
    private String caminho;
    private String nome
    @Enumerated(EnumType.STRING)
    private NivelAcesso nivelAcesso;
}

Na sua página de usuário usa esse msm Enum e no PhaseListener vc compara o se é o mesmo Enum na página e no usuário.