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

Dúvida em relação a projetos grandes

Boa tarde,

estou iniciando o estudo em angularJS e muitas dúvidas (hehehe) surgiram conforme eu fui me aprofundando mais sobre o assunto.

Existe um sistema em que eu trabalhei que realizava o controle de acesso da seguinte maneira:

Usuário 1 pertinente ao grupo de administradores (grupo localizado dentro de uma tabela no MySQL) acessa a url: /admin/user/create

Bom, o PHP realizava o "parse" dessa url. Cada grupo do sistema possuia as rotas (também salvas em uma tabela no MySQL) a qual poderia acessar, assim ele checava se o usuário com a sessão ativa tinha permissão ou não para acessar aquela rota.

Tomando isso como base, tínhamos vários tipos de acesso dentro do mesmo sistema. Além de vários módulos também.

A minha pergunta é, a melhor forma de continuar utilizando este tipo de controle de acesso, seria:

Para cada rota que o angular acessar, eu crio um serviço que vai no meu backend, checa se o usuário tem o token, se ele tiver, checa o tipo de usuário que ele é, assim ele verifica se a rota que ele está tentando acessar é pertinente ao grupo que ele está alocado. Se for permitido acesso a rota, o angular carrega a view, se não ele mostra outra página informando que não tem acesso.

Teria uma forma melhor de se implementar isso?

Obrigado.

6 respostas

O caminho que muitos desenvolvedores tem seguido é usar um token que é enviado para o usuário assim que ele se autentica. Sua aplicação Angular guarda o token no localStorate reenviando-o a cada requisição. Em cada requisição seu backend verifica o token e dá acesso ou não.

O que pode acrescentar à discussão é que geralmente se usa o JWT (JSON WEB TOKEN). Há uma parte da especificação na qual há um espaço reservado para você adicionar a informação quer quiser, o famoso payload. Nele, você pode colocar a lista de permissões do usuário. Como o token é assinado digitalmente, não pode ser adulterado e apenas seu servidor consegue tal façanha. Dai, ele pode consultar as permissões do usuário e decidir se emite um 401 ou permite o acesso ao recurso.

Espero ter ajudado.

Boa tarde Flávio, obrigado pela resposta.

Então, eu ainda não vi sua aula sobre, mas logo estarei lá. Adiantando. Minha dúvida é, se eu colocar um array de permissões dentro do Token, ele será criptografado, correto?

Se sim, como eu irei utilizar essas informações no meu frontend. Não tem perigo quanto a segurança se alguém conseguir alterar esses dados?

Ou o certo seria, eu crio o token pro usuário, e a cada requisição eu vejo se ele tem acesso ou não à aquela rota? (Digo a cada requisição, toda vez que ele clicar pra alterar a rota, é feita uma requisição no servidor checando se ele tem acesso ou não)

Flávio, estava lendo novamente, isso está bem entendível pra mim quanto ao acesso à um serviço por exemplo.

O app vai chamar uma API pra listar usuários em uma tabela, ele manda o token junto e valida se tem acesso ou não.

Porém, minha dúvida é quanto as páginas. Como controlar a visualização delas?

Você precisa filtrar toda requisição Ajax feita no seu cliente. Se pintar um 401 em um response qualquer você redireciona ele para uma view parcial que pede login.

Não há problema de segurança, ele é assinado.

Vi que você está no segundo capítulo do curso e que ainda não fez nenhum exercício. Talvez seja interessante você terminar o curso para ir amadurecendo as ideias sobre assunto.

Se quiser aprender como angular trabalha com interceptadores eu ensino o curso de MEAN. Assim você completa seus conhecimentos sem atropelar etapas.

Mas eu acho mais indicado terminar o curso para você consolidar seus conhecimentos. Alias, no curso de MEAN o projeto é o mesmo, alurapic. Por mais que você não queria usar Node lhe dará uma ideia geral da problemática que você tenta resolver.

solução!

Ah, e no curso de MEAN tem todo o fluxo de como lidar com o token. Aí é só transpor para sua tecnologia preferida. Era um pedido dos meus alunos que tangência o que você quer compreender melhor.