4
respostas

Relacionar Login com Dados no Banco

Boa tarde

Preciso tirar um dúvida com os professores...

Estou desenvolvendo uma aplicação asp.net mvc Core, porém utilizo apenas 1 banco de dados, mas preciso filtrar os dados de acordo com o usuários logado.

Então minha tabela existira uma coluna chamado Grupo_Usuario e na tabela Usuário conterá também uma Coluna chamada Grupo_Usuario eu tenho as seguintes regras para passar ao sistema, (é isso que estou com dúvida)

  1. Quando um novo usuário se cadastra, eu tenho que gerar um NOVO ID para que eu use este valor para filtrar e cadastrar dados... é a melhor opção trabalhar com session ?, não é inseguro ? Qula outra forma tenho ?

2 . Imaginando que o ID venha, por algum lugar (pergunta 1), o usuário vai cadastrar um novo cliente, então eu passo na coluna Grupo_Usuario o codigo que nele esta relacionado, certo... cadastrar seria até fácil... mas e para filtrar ?

Me parece meio errado fazer assim....

public IActionResult ListaCliente()
{
  var XPTO = SessionGrupoUsuairio_ou_outra_fonte;
  var dados = _DataServices.Lista.Where(a => a.Grupo_Usuario == XPTO).ToList();
}

Ou esta regra deveria estar no DataSevices (Igual ao DAO la) ?

public IActionResult ListaCliente()
{
  var dados = _DataServices.Lista.().ToList();
}

DataServices()
{
    public IList<Clientes> Lista()
    {
        return _contexto.Clientes.Where(a => a.Grupo_Usuario = XPTO);

    }
}

Ou tem outra forma mais PROFISSIONAL de resolver isso ?

4 respostas

Olá Jose,

de acordo com o que você descreveu, me parece que você quer fazer um relacionamento many to many entre o usuário e a outra tabela com a qual você quer filtrar de acordo com o usuário. Por exemplo, vamos supor que eu tenho a tabela Usuario e uma outra tabela Turma. E agora eu preciso filtrar em quais turmas meu usuário está cadastrado. Ou seja, um usuário está inscrito em várias turmas e uma turma tem vários usuários inscritos (many to many).

Falando em bancos de dados, neste momento o que fazemos é criar uma terceira tabela, por exemplo Turma_Usuario, que tem duas colunas chaves estrangeiras, o id do usuário e o id da turma. Assim através desta tabela eu consigo filtrar em quais turmas o usuário está inscrito.

Aqui tem um link que mostra como criar um relacionamento many to many no Entity Framework.

Quanto a parte do usuário logado, para fazer um sistema de login/senha você terá que controlar a session na mão e guardar o usuário nesta session ou usar o Identity que é o framework que já tem dentro do core com as lógicas de login e senha tudo prontas. Aqui tem um link com a documentação da microsoft de como usar o identity.

Desculpa..acho que me expressei mal... Não foi exatamente isso que quero saber...

Vou construir um sistema de cadastro de clientes onde preciso filtrar os dados de acordo com o usuário ligado.

Diante disso preciso sempre usar um ID .. Algo que me identifica o usuário na tabela clientes....

Minha duvida é..PERSISTIR em session é a melhor opção? Ou tem outra solução mais profissional?

É melhor manter no controller este filtro ou no dao? var dados = clienteDAO.getall().where(a -> a.userid == XPTO).tolist()

Oi, alguém do Alura pode responder ??

Olá Jose,

como comentei no meu post anterior, você pode guardar na sessão o seu usuário logado e fazer todo o sistema de login/senha na mão. Guardando o usuário na sessão você consegue recuperar o id do usuário e fazer a consulta desejada. Caso seu sistema seja muito simples, é o jeito mais rápido de fazer.

Mas se você tiver uma grande preocupação com a parte de segurança e não quiser ficar implementando tudo na mão, você pode usar o Identity para fazer a lógica de login e senha. Este framework já tem toda a lógica de como guardar usuário em sessões e como recuperar depois o usuário que está logado. Aqui tem um link com a documentação da microsoft de como usar o identity, que inclusive tem um exemplo neste link que mostra como recuperar as informações do usuário logado .