如何使用与Roles连接的附加表扩展ASP.NET MVC标识?

时间:2015-01-20 18:20:23

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

我已阅读有关如何扩展身份的信息以及与用户个人资料相关的其他字段。

但我无法理解如何通过添加与Roles连接的表来扩展身份功能。

我想做什么:

  1. 我的MVC应用程序应该包含一些子应用程序。
  2. 我希望通过角色识别用户并将其重定向到所需的子应用程序。
  3. 在子应用程序内部,他们可以拥有不同的角色(管理员,用户等)
  4. 因此,所有角色都列在“身份角色”表(AspNetRoles)中。
  5. 现在我需要向AspNetRoles添加一个额外字段,该字段指向具有子应用程序名称的新表。
  6. 新的子应用程序类是:

    public class Project 
    {
        public int ID { get; set; }
    
        [StringLength(100)]
        public string ProjectName { get; set; }
    
       // How can the foreign key to AspNetRoles be added  ?    
    }
    

    你能帮忙在AspNetRoles表中添加一个外键吗?

1 个答案:

答案 0 :(得分:2)

John Atten撰写了关于此主题的extraordinary blog post。一般的想法是什么?

您创建IdentityRole类的子类,并将您的Project类添加为属性以创建关系。代码看起来有点类似于以下内容:

public class ApplicationRole : IdentityRole
{
    public ApplicationRole() : base() { }

    public ApplicationRole(string name) : base(name)
    {
    }

    public virtual Project Project { get; set; }
}

扩展标识角色类一节中,他还会在DbContext中显示您接下来要做的事情(查看OnModelCreating方法的实现)。在某些情况下,这不是必需的。如果使用IdentityDbContext的通用实现,则可以将角色实现作为类型参数传递。缺点是您通常还必须实现其他类型参数(在大多数情况下,只需创建用于type参数的基类的子类)。

总的来说,我喜欢约翰创造整个事物的方式,因为与使用泛型的方式相比,它可以让你获得更多的控制权。您应该阅读文章到最后,因为他详细解释了重要的概念。