将声明添加到ApplicationUser的子类

时间:2016-04-28 14:18:23

标签: c# asp.net-mvc entity-framework asp.net-identity

在我的MVC应用程序中,我使用TPT inheritance创建了基本ASP身份ApplicationUser类的两个子类,并希望向对象添加一些声明,以便我可以轻松地显示属性视图中的子类。

我必须错过一个简单的技巧/对ASP身份设置有一个基本的误解,但我看不出怎么做。

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? **
}

1 个答案:

答案 0 :(得分:3)

您可以将GenerateUserIdentityAsync设置为ApplicationUser中的虚拟方法,这将允许您覆盖具体类型中的实现。

这是我能看到的最干净的选择。