J'utilise MVC5 Identity 2.0 pour que les utilisateurs se connectent à mon site Web, où les détails d'authentification sont stockés dans une base de données SQL. Asp.net Identity a été implémenté de manière standard, comme on peut le trouver dans de nombreux tutoriels en ligne.
La classe ApplicationUser dans IdentityModels a été étendue pour inclure certaines propriétés personnalisées, telles qu'un entier OrganizationId. L'idée est que de nombreux utilisateurs peuvent être créés et affectés à une organisation commune à des fins de relation de base de données.
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; }
}
Comment puis-je récupérer la propriété OrganizationId de l'utilisateur actuellement connecté à partir d'un contrôleur? Est-ce disponible via une méthode une fois qu'un utilisateur est connecté ou dois-je toujours récupérer le OrganizationId de la base de données, basé sur le UserId, chaque fois qu'une méthode de contrôleur s'exécute?
En lisant sur le Web, j'ai vu que je devais utiliser ce qui suit pour obtenir l'ID utilisateur connecté, etc.
using Microsoft.AspNet.Identity;
...
User.Identity.GetUserId();
Cependant, OrganizationId n'est pas une propriété disponible dans User.Identity. Dois-je étendre User.Identity pour inclure la propriété OrganizationId? Si oui, comment dois-je procéder.
La raison pour laquelle j'ai si souvent besoin de OrganizationId est que de nombreuses requêtes de table dépendent de OrganizationId pour récupérer des données pertinentes pour l'organisation associée à l'utilisateur connecté.