Ich verwende MVC5 Identity 2.0, damit sich Benutzer bei meiner Website anmelden können, auf der die Authentifizierungsdetails in einer SQL-Datenbank gespeichert sind. Asp.net Identity wurde standardmäßig implementiert, wie in vielen Online-Tutorials zu finden ist.
Die ApplicationUser-Klasse in IdentityModels wurde um einige benutzerdefinierte Eigenschaften erweitert, z. B. eine ganzzahlige Organisations-ID. Die Idee ist, dass viele Benutzer für Datenbankbeziehungszwecke erstellt und einer gemeinsamen Organisation zugewiesen werden können.
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; }
}
Wie kann ich die OrganizationId-Eigenschaft des aktuell angemeldeten Benutzers von einem Controller aus abrufen? Ist dies über eine Methode verfügbar, sobald ein Benutzer angemeldet ist, oder muss ich die Organisations-ID jedes Mal, wenn eine Controller-Methode ausgeführt wird, basierend auf der Benutzer-ID aus der Datenbank abrufen?
Beim Lesen im Web muss ich Folgendes verwenden, um die angemeldete Benutzer-ID usw. zu erhalten.
using Microsoft.AspNet.Identity;
...
User.Identity.GetUserId();
OrganizationId ist jedoch keine in User.Identity verfügbare Eigenschaft. Muss ich User.Identity erweitern, um die OrganizationId-Eigenschaft einzuschließen? Wenn ja, wie gehe ich vor?
Der Grund, warum ich die Organisations-ID so oft benötige, ist, dass viele Tabellenabfragen von der Organisations-ID abhängen, um Daten abzurufen, die für die Organisation relevant sind und dem angemeldeten Benutzer zugeordnet sind.