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

Permissões de acessos

Olá Mestre, Essa semana entro em uma etapa complexa do meu sistema.

desafio: Implantar permissão de acesso conforme o perfil do usuário logado.

Pensei várias formas de fazer isso, após o usuário fazer login o api me retornar um objeto com os acessos, porem o sistema ele exige um alto nível de segurança e armazenar por exemplo em um localStorage, não seria o mais aconselhado, na minha opinião.

Então vendo por esse lado, como eu poderia fazer, usar interceptor, tem como? Como funcionaria? Criar uma factory, que faz requisições http?

e detalhe hoje existe 4 grupos/perfil com valores pré-definidos, porem o dono da conta pode alterar esses valores, exemplo (tem um perfil que é gerente e o gerente tem tais permissões, porem o adm da conta pode ir la e alterar os valores de permissões para esse grupo gerente)

então minha validações no angular, tbm deve ser dinamicas, minha duvida como estruturar tudo isso?

4 respostas

Oi Glauber, enquanto o mito das spas não chega, vou dar meu pitaco aqui. Não vejo problema em armazenar no localStorage... Se a sua preocupação é em alguém olhar, o mesmo vai acontecer para o interceptor, dado que todo o código está no lado do cliente.

A garantia precisa estar no lado do servidor... Se alguém executar uma ação com um perfil que não poderia, seu servidor tem que barrar. O cliente é terra de ninguém, nem me preocuparia em uma super estrutura para proteger isso.

A bacana, verdade

solução!

Oi Glauber, vou te passar uma visão geral, ok?

Sua autenticação em Angular, acredito eu, se baseia em token. Acredito que seja JWT porque é padrão de mercado. Então, quando você se autenticar você enviará o token para o usuário (token deve ser guardado para reenvio posterior) e nesse token você tem o usuário e as permissões dele. Mas isso esta criptografado e sua app angular não conseguirá tirar nenhuma informação dele! É por isso que na resposta da autenticação, além do token, você envia um json com o usuário e suas permissões e coloca no localstorage, por exemplo. Você usa esse dado para controlar o lado da aplicação angular (vai criar um serviço lindo que acessa o storage e tals), mas você deve estar pensando assim: mas se alguém alterar os valores do localstorage terá acesso a minha aplicação? Não, no máximo ele conseguirá acessar views do Angular que ele não teria acesso, mas isso não tem problema algum, porque toda a execução feita no servidor é validada através do token que sua aplicação Angular recebeu, guardou e envia a cada requisição. Então, vamos suport que há uma botão que só pode ser exibido se o cara é admin e alguém vai lá e altera no localstorage. Coitado do cara, porque o botão vai aparecer, mas quando a operação for executada é o token criptogrado enviado sempre a cada requisição e descriptogravado a cada requisição que deve ser consultado se o usuário pode ou não executar determinada operação.

Ficou mais claro agora?

Aliás, JWT não é apenas para SPA, eu uso em aplicações Web non SPA, porque session sucks!

Perfeita explicação Flavio, Muito Obrigado