自定义没有角色的 IdentityUser

Customize IdentityUser without Roles

我已经开始开发新的 ASP.NET MVC 应用程序,我想使用 ASP.NET Identity 2 进行用户管理。我想摆脱角色的事情,因为我认为这绝对不需要,特别是如果我想到这种方式,ASP.NET 身份在幕后处理角色:如声明的那样。 (如有错误请指正)

我有两个关于这个问题的信息:This official Microsoft-Documentation 指出,如果开箱即用的方法不能满足所有要求,那么只需要实现所需的功能。另一个信息是,必须从 Microsoft.AspNet.Identity.EntityFramework.IdentityUser 派生自定义用户。但是 IdentityUser 实现 IdentityUser<string, IdentityUserLogin, IdentityUserRole, IdentityUserClaim>, IUser, IUser<string>

从我的角度来看,这些信息并不真正兼容,因为如果我从这个 IdentityUser 派生,无论我是否需要,我都会将所有这些东西带入我的 CustomUser-Implementation。

我还想知道一件事:据我了解Identity-Architecture,主要有两个部分:Stores和Manager。 Manager耦合到Application和Store,而Store耦合到Manager和Storage。

存储接口和我预期的一样灵活。也许我应该从这里开始——但我仍然不知道如何创建一个 customUser 作为一个实体,它派生自 IdentityUser,而不引用任何 Roles。谁能告诉我我的问题是什么?

我发现的关于这个问题的唯一 Whosebug 问题是 here。但我不相信,这是一种可以遵循的方法。

嗯,首先,你无法真正摆脱角色。您可以选择不使用它们,但您仍将拥有一个 AspNetRoles table。没有办法摆脱它,因为角色功能是内置的。身份是可扩展的,因为您可以自定义和扩展角色,但这种关系是不可移除的。 Microsoft 文档本身并没有错;只是可能还不完全清楚。如果您不想使用角色,则不必实施任何基于角色的功能。换句话说,您不必创建功能来管理角色、为用户分配角色或验证用户是否属于特定角色。但是,这并不意味着核心角色功能不再存在于 Identity 中:只是您可以选择不使用它。

其次,实际上需要角色,至少如果您希望拥有基于权限的访问控制。如果每个登录用户都可以做任何其他登录用户可以做的所有事情,那么角色可能就没有必要了,但是如果有任何特定于用户子集的功能,那么您 需要 角色。此外,角色不是声明,尽管它们的功能与声明的作用很相似。不过,Identity 有一个单独的概念 "claims"。