我开始在新的ASP.NET MVC-App上开发,我想使用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主要有两个部分:商店和经理。 Manager与应用程序和存储区耦合,而存储区则与Manager和存储区耦合。
存储接口和我预期的一样灵活。也许我应该从这里开始 - 但我仍然不知道,如何创建一个customUser作为一个实体,它来自IdentityUser,没有任何对Roles的引用。谁能告诉我我的问题是什么?
我发现有关此问题的唯一stackoverflow问题是 here。但我不相信,这是一种可以遵循的方法。
答案 0 :(得分:2)
嗯,首先,你无法真正摆脱角色。你可以选择不使用它们,但你仍然会有一个AspNetRoles表。随着角色功能的出现,无法摆脱这种情况。身份是可扩展的,因为您可以自定义和扩展角色,但关系不可移除。 Microsoft文档本身并没有错;它可能并不完全清楚。如果您不想使用角色,则不必实现任何基于角色的功能。换句话说,您不必创建管理角色,为用户分配角色或验证用户是否处于特定角色的功能。但是,这并不意味着核心角色功能在Identity中不再存在:只是您可以选择不使用它。
其次,角色实际上是需要的,至少如果您有任何基于权限的访问控制的愿望。如果每个登录用户都可以执行任何其他登录用户可以执行的操作,则可能不需要角色,但如果有任何特定于用户子集的功能,那么您需要角色。此外,角色不是声明,尽管它们的功能与声明相同。但是,身份有一个单独的“主张”概念。