在我的MVC应用程序中,我已经使用TPT inheritance创建了基本ASP Identity ApplicationUser
类的两个子类,并希望向对象添加一些Claims,以使我能够轻松地在视图中显示子类的属性。
我一定想念一个简单的技巧/对ASP Identity设置有基本的误解,但是我看不到如何做到这一点。
将Claims添加到ApplicationUser
类将很简单,但是在子类中不能重写您在其中进行操作的GenerateUserIdentityAsync
方法,以允许我在其中进行操作。
有没有一种方法可以简单地实现这一目标(因为其他所有设置都可以正常工作),还是我必须设置我的两个ApplicationUser
子类以直接从IdentityUser
继承,并为它们设置两个配置?他们都在IdentityConfig.cs
?
我正在谈论的课程如下:
//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? **
}
最佳答案
您可以在ApplicationUser中将GenerateUserIdentityAsync设为虚拟方法,从而允许您覆盖具体类型的实现。
这是我所看到的最干净的选择。