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

Duvida sobre permissão de usuário!

Olá,

Estou com uma duvida em relação de acesso de usuário!

Vamos supor que meu sistema tem várias empresas e usuários que pertencem a esse sistema. No caso meu usuário pode pegar informações da empresa ao qual está cadastrado.

Para isso criei um CRUD e um Controller para pegar essa informação, vamos supor que o nome dessa informação seja conteúdo. Dai disponibilizo essas informações pelo link:

http://meudominio/idEmpresa/idConteudo

Até ai tudo bem, só o que acontece, todos que estão cadastrados no meu sistema a minha ROLE_USUARIO pode ver qualquer empresa só alterando o idEmpresa no link e o idConteudo, o que seria uma falha de segurança! A minha dúvida é a seguinte. Qual estratégia posso está utilizando para apenas os meus usuários da empresa '1' por exemplo ver somente os conteúdos dela!

Ou se existe algum curso na Alura que trata esse tipo de conteúdo!

7 respostas

Oi Luis, tudo bem ?

Uma forma de fazer isso é usar o conceito de JWT, que você precisa mandar um token nas requisições, dessa forma você consegue validar se aquele token está autorizado a fazer esse tipo de requisição.

Olá Matheus,

Na verdade minha duvida não é sobre JWT, esse problema de acessibilidade já consegui resolver! Meu problema agora outro!

Vou tentar explicar melhor! Depois de ter feito uma o login com o JWT, ele me da acesso a http://meudominio/**

Porém qualquer usuario logado pode colocar o idEmpresa e colher informações desta empresa depois de logado!

Vamos supor, eu tenho um usuario A - ele tem acesso a Empresa A que ta especificado no id '1'.

Porém se ele tentar acessar http://meudominio/2 ele tem acesso a minha empresa B de id '2'.

Enviando um crud apenas para explicar melhor

public interface EmpresaRepository extends CrudRepository<Empresa, Long>{

    T findOne(ID id);

}

Será que não vale a pena você pegar esse id do usuário logado por exemplo ?

Ai você meio que encapsula esse parâmetro não dando vazão a essa falha de vulnerabilidade !

Olá,

Matheus eu criei uma classe onde vai me retornar o meu id de usuário logado!

No caso eu posso usar essa função para pegar o ida quando eu necessitar! E uso ele toda vez que for fazer uma requisição no meu DAO ou Repository!

To te perguntando isso, por que não sei se é uma boa pratica fazer este tipo de ação! To tentando usar as boas praticas!

Porém o problema é que toda entidade que eu for fazer a requisição eu tenho que ter um objeto Empresa dentro dela!

@Component
public class UsuarioAutenticado {

    private AppUser getUsuarioAutenticado()
    {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); 
        if(authentication != null){
            Object obj = authentication.getPrincipal();
            if (obj instanceof AppUser){
                return (AppUser) obj;
            }        
        }
        return null;

    }

    public int getEmpresa() {
        int id = (int) getUsuarioAutenticado().getEmpresa().getId();
        return id;
    }

    public String getUsuario() {
        String usu = getUsuarioAutenticado().getUsername();
        return usu;
    }

}
solução!

Talvez pareça ser mais trabalhoso, mas dessa forma você tem total responsabilidade sobre o código e o sistema

ok, obrigado pelas dicas Matheus

Não há de que :D

O que precisar pode abrir um novo tópico

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software