Estou usando o MVC5 Identity 2.0 para que os usuários façam login no meu site, onde os detalhes da autenticação são armazenados em um banco de dados SQL. A identidade do Asp.net foi implementada de maneira padrão, como pode ser encontrado em muitos tutoriais online.
A classe ApplicationUser em IdentityModels foi estendida para incluir algumas propriedades personalizadas, como um OrganizationId inteiro. A ideia é que muitos usuários possam ser criados e atribuídos a uma organização comum para fins de relacionamento com o banco de dados.
public class ApplicationUser : IdentityUser
{
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
//Extended Properties
public DateTime? BirthDate { get; set; }
public long? OrganizationId { get; set; }
//Key Mappings
[ForeignKey("OrganizationId")]
public virtual Organization Organization { get; set; }
}
Como recuperar a propriedade OrganizationId do usuário conectado no momento de dentro de um controlador? Isso está disponível por meio de um método depois que um usuário está logado ou eu sempre recupero o OrganizationId do banco de dados, com base no UserId, toda vez que um método do controlador é executado?
Lendo na web que eu vi, preciso usar o seguinte para obter o UserId conectado etc.
using Microsoft.AspNet.Identity;
...
User.Identity.GetUserId();
No entanto, OrganizationId não é uma propriedade disponível no User.Identity. Preciso estender User.Identity para incluir a propriedade OrganizationId? Se sim, como faço para fazer isso.
O motivo pelo qual preciso do OrganizationId com tanta frequência é que muitas consultas de tabela dependem do OrganizationId para recuperar dados relevantes para a organização associada ao usuário conectado.