0

我有一个系统,它使用内置的身份系统来验证管理部分的用户。

我想让其他用户通过外部 Web 服务登录,但想知道我是否可以为他们创建一个不同的用户类,并仍然利用 [Authorize] 属性等内置功能。

假设自定义类如下所示:

public class CustomUser
{
    public string Name { get; set; }
    public string Ssn { get; set; }
}

我会将此用户添加到一个角色中,例如“customUser”,所以在控制器中我想使用这样的授权属性:

[Authorize(Roles="customUser")]
public ActionResult DoStuff()
{
    // do stuff
}

这可能吗,有一个自定义用户类并手动验证他吗?

4

1 回答 1

0

当然。只需继承自ApplicationUser(或您命名IdentityUser派生类的任何名称):

public class CustomUser : ApplicationUser
{
    public string Name { get; set; }
    public string Ssn { get; set; }
}

Authorize但是,您不能像示例代码所建议的那样直接使用它。您要么需要:

  1. 在您的操作中执行自定义检查以验证用户类型。

  2. 向用户添加角色并通过该自定义角色进行授权。

  3. 创建一个自定义AuthorizeAttribute来检查用户是否是正确的类型

更新

当你从你那里继承时,ApplicationUser你不会得到一个单独的表。EF 将向 中添加一Discriminatordbo.AspNetUsers,其值为“ApplicationUser”或“CustomUser”,具体取决于保存的内容。然后,当您从数据库中查询用户时,EF 将使用此列来实例化相应的类。

需要注意的一点是,UserManager它实际上是UserManager<ApplicationUser>. 它是一个泛型类,因此在实例化时指定为类型参数的任何用户类都将是该类UserManager操作的对象。因此,如果您想使用CustomUser,您将需要一个UserManager<CustomUser>.

于 2017-02-13T15:20:28.070 回答