1

我已经开始开发一个新的ASP.NET MVC-App,我想使用ASP.NET Identity 2进行用户管理。我想摆脱角色,因为我认为这绝对不是必需的,特别是如果我想到这种方式,ASP.NET Identity会在幕后处理角色:作为声明。 (请纠正我,如果我在这里是错误的)Customize IdentityUser without Roles

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

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

还有一件事我想知道:据我了解身份架构,主要有两个部分:商店和经理。管理器与应用程序和商店耦合,而商店与管理器和存储器耦合。

存储接口和我预期的一样灵活。也许我应该从这里开始 - 但我仍然不知道如何创建一个CustomUser作为实体,它来自IdentityUser,没有任何对角色的引用。任何人都可以告诉我我的问题是什么?

我在这个问题上发现的唯一的stackoverflow问题是 here。但我不相信,这是一种遵循的方法。

+0

你可以使用ASP.NET Core吗? – Win

+0

你想摆脱角色,但你想要回报什么? –

+0

我不明白这种渴望摆脱那些并不真正在路上的东西。如果你不需要角色 - 不要使用它们。是的,你的数据库中会有2个表格。所以呢?这些表格将是空的,几乎不会占用任何空间(现在存储空间很便宜)。努力去解决它们会浪费时间,而且不是很成功。 – trailmax

回答

2

嗯,首先,你不能真正摆脱角色。你可以选择不使用它们,但你仍然会有一个AspNetRoles表。当角色功能被烘烤时,没有办法摆脱这种情况。身份是可扩展的,因为您可以自定义和扩展角色,但关系不可移除。微软的文档本身并没有错,在这里,本身;这可能不完全清楚。如果您不想使用角色,则不必实施任何基于角色的功能。换句话说,您不必创建管理角色,为用户分配角色或验证用户是否具有特定角色的功能。但是,这并不意味着核心角色功能不再存在于身份中:只是您可能会选择不使用它。

其次,角色实际上是需要的,至少如果您有任何愿意拥有基于权限的访问控制。如果每个登录用户都可以执行任何其他登录用户的操作,那么角色可能不是必需的,但是如果有任何功能是特定于某个用户子集的,那么您需要角色。另外,角色不是声称,尽管他们的功能与声明一样。不过,身份有一个单独的“索赔”概念。

+0

首先,感谢您的回答!我有一个需要经典角色的应用程序。但是,对于“角色”也不可能采用基于索赔的方法吗?我读过,不推荐混合这两种方法..角色至少不够灵活,而且成本较低,不是吗? – Joshit

+1

开箱即用,它们可能不够灵活,但你可以用足够多的努力几乎赋予你喜欢的任何能力。身份的每个部分都是可扩展的。索赔更具灵活性,因为没有固有的用例。你可以使用它们,但是你需要使用它们并将它们塑造成你的意愿。不过,我个人认为忽略现有角色系统并不是一个好主意,而是在债权背后推出自己的角色系统。你不仅会得到重复的功能,而且你还要为此负责所有的逻辑。 –