Modelo de usuário separado entre User Account e User Profile

Patrick Porto
Aug 23, 2017 · 2 min read

Quando estamos modelando o banco de dados prevendo um sistema de autenticação e autorização, uma questão comum que temos dúvidas frequentes é na estrutura dos modelos. Muitos optam por definir um modelo centralizado de informações de usuário enquanto outros preferem modelagens mais granulares.

A seguir iremos abordar uma modelagem que acredito ser ideal para os problemas mais comuns.

Visão sobre Usuário

Antes de começar a modelagem, precisamos compreender o que seria um usuário. Para a solução que iremos abordar neste artigo, iremos utilizar a seguinte definição:

O usuário é um agente externo ao sistema que o utiliza para algum determinado fim.

Essa é uma definição quase consensual sobre o usuário. Seguindo essa definição a risca, podemos criar um modelo chamado User que teria um username (ou email), que seria o identificador, e um password.

Quando estamos implementando as regras de negócio acabamos entrando em outras questões. Uma abordagem comum é a persistência CPF no modelo de User, mas entramos nos seguintes problemas conceituais:

  • Enquanto a autenticação for por usuário e senha, o CPF não é uma informação utilizada para identificação e tem caráter estritamente informativo.
  • Seguindo a definição de usuário, o CPF não deveria influenciar na utilização do sistema pelo seu caráter informativo. Além de que nós podemos ter casos de usuários que não necessariamente são pessoas físicas.

No caso que estamos abordando, o usuário precisa apenas de username e password para utilizar o sistema, então onde faz sentido persistir as informações que não influenciam no acesso do usuário?

Gestão de perfil de usuário

As informações de não influenciam o acesso do usuário se enquadram melhor em um outro modelo chamado UserProfile enquanto os dados que fornecem acesso ficariam no modelo UserAccount (O usuário segundo a nossa definição). Em um banco de dados relacional, a conta de usuário seria uma entidade fraca relacionada ao perfil de usuário.

O desmembramento de User entre UserAccount e UserProfile oferece os seguintes benefícios:

  • Um UserProfile pode ter mais de um UserAccount, permitindo um mesmo usuário possa utilizar mais de um username (ou email) para acessar o sistema.
  • O usuário poderia utilizar o sistema sem possuir UserProfile. Nesse caso, a UserAccount não pode ser uma entidade fraca.
  • O UserProfile pode ter tipos diferentes de UserAccount, como por exemplo para acesso via redes sociais.

Conclusão

Nesse artigo apresentei uma forma de realizar a modelagem de usuário, distinguindo UserAccount e UserProfile. Esta abordagem pode não ser a mais simples, mas busca ser a mais versátil.

)
Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade