In meiner MVC-Anwendung habe ich zwei Unterklassen der grundlegenden ASP Identity ApplicationUser
Klasse erstellt mit TPT inheritance, und möchte einige Ansprüche auf die Objekte hinzufügen, damit ich die Eigenschaften aus der Unterklassen in Ansichten.Hinzufügen von Ansprüchen zu einer Unterklasse von ApplicationUser
Ich muss einen einfachen Trick vermissen/habe ein grundlegendes Missverständnis der ASP Identity Setup, aber ich kann nicht sehen, wie dies zu tun ist.
Hinzufügen von Ansprüchen an die ApplicationUser
Klasse wäre einfach, aber die Methode, wo Sie dies tun, kann nicht in den Unterklassen überschrieben werden, damit ich es dort tun kann.
Gibt es eine Möglichkeit, dies zu erreichen, einfach (wie alles andere mit dieser Einrichtung arbeitet gut), oder muss ich meine zwei ApplicationUser
Subklassen einrichten direkt von IdentityUser
erben, und richten Sie zwei Lose Config für sie beide in IdentityConfig.cs
?
Die Klassen ich spreche, sind wie folgt:
//The ApplicationUser 'base' class
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string ProfilePicture { get; set; }
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
//** can add claims without any problems here **
userIdentity.AddClaim(new Claim(ClaimTypes.Name, String.Format("{0} {1}", this.FirstName, this.LastName)));I
return userIdentity;
}
}
public class MyUserType1 : ApplicationUser
{
[DisplayName("Job Title")]
public string JobTitle { get; set; }
//** How do I add a claim for JobTitle here? **
}
public class MyUserType2 : ApplicationUser
{
[DisplayName("Customer Name")]
public string CustomerName { get; set; }
//** How do I add a claim for CustomerName here? **
}
Ich möchte jedoch Ansprüche für Eigenschaften innerhalb der beiden Unterklassen hinzufügen, die in der Basisklasse nicht verfügbar wären, sorry, wenn ich das nicht sehr gut beschreiben würde. – Ted
Ja, ich verstehe, was du meinst. Könnten Sie GenerateUserIdentityAsync in der Basisklasse virtuell machen und dann in den konkreten Klassen überschreiben? Noch besser wäre es, es abstrakt zu machen, aber ich vermute, dass Sie dies nicht tun können, da ApplicationUser IdentityUser implementiert –
Brilliant, ja, das ist es natürlich. Ich hatte es in meinem Kopf, dass die GenerateUserIdentityAsync-Methode Teil der IdentityUser-Schnittstelle war und nicht geändert werden konnte, und ich gebe zu, dass ich den virtuellen Modifizierer vorher noch nicht verwendet habe (nur abstrakt), also wahrscheinlich nicht habe trotzdem daran gedacht, vielen dank! (Wenn Sie Ihre Antwort bearbeiten möchten, um dies stattdessen zu empfehlen, werde ich sie akzeptieren und aktualisieren) – Ted