Sto utilizzando MVC5 Identity 2.0 per consentire agli utenti di accedere al mio sito Web, dove i dettagli di autenticazione sono memorizzati in un database SQL. Asp.net Identity è stata implementata in modo standard come è possibile trovare in molti tutorial online.
La classe ApplicationUser in IdentityModels è stata estesa per includere alcune proprietà personalizzate, come OrganizationId intero. L'idea è che molti utenti possono essere creati e assegnati a un'organizzazione comune per scopi di relazione con il database.
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; }
}
Come posso recuperare la proprietà OrganizationId dell'utente attualmente connesso da un controller? È disponibile tramite un metodo una volta che un utente ha effettuato l'accesso o devo sempre recuperare OrganizationId dal database, in base a UserId, ogni volta che viene eseguito un metodo controller?
Leggendo sul Web ho visto che devo usare quanto segue per ottenere l'Identificativo registrato ecc.
using Microsoft.AspNet.Identity;
...
User.Identity.GetUserId();
Tuttavia, OrganizationId non è una proprietà disponibile in User.Identity. Devo estendere User.Identity per includere la proprietà OrganizationId? In tal caso, come posso procedere.
Il motivo per cui ho bisogno di OrganizationId così spesso è che molte query di tabelle dipendono da OrganizationId per recuperare i dati rilevanti per l'organizzazione associati all'utente che ha effettuato l'accesso.