向用户 ASP.NET 身份添加自定义角色

Posted

技术标签:

【中文标题】向用户 ASP.NET 身份添加自定义角色【英文标题】:Adding custom role to user ASP.NET Identity 【发布时间】:2014-08-08 21:00:32 【问题描述】:

问题背景

在我的 Web 应用程序中,我一直在使用 ASP.NET Identity。我通过从 IdentityUser 继承 User 类创建了自定义用户配置文件。为了能够将角色与例如角色组连接起来,我还在我的数据库中创建了一个自定义角色类,它继承自 IdentityRole 类。

我的数据库模型如下所示:

问题不在于创建用户。 这行得通:

var userManager = new UserManager<User>(new UserStore<User>(_context));
var result = userManager.Create(user, password);

与创建角色相同。

var rm = new RoleManager<Role>(new RoleStore<Role>(_context));
var result = rm.Create(new Role(name));

问题

但是当我尝试将角色附加到用户时(使用以下代码

var um = new UserManager<User>(new UserStore<User>(_context));
var result = um.AddToRole(userId, roleName);

我得到的错误基本上是“实体类型 IdentityRole 不是当前上下文模型的一部分。

这是真的,顺便说一句。但是我怎样才能使我的 Role 实体被视为 IdentityRole 实体,它基本上是或必须是。

在此处查看完整的堆栈跟踪:http://pastebin.com/sEPv5LiT

提前致谢!

【问题讨论】:

您有两个不同的上下文是否有特定原因?如果没有为 UserManager 使用相同的上下文,您的实体可能会起作用:***.com/a/22672165/433234 我有一个 DbContext。此外,这三段代码使用我的 DbContext 的相同实例,这不应该给 AFAIK 带来任何问题。 遇到同样的问题,你解决了吗? @YehiaA.Salam 最后,我在创建帐户后“手动”将角色连接到特定用户,效果很好。手动我的意思是直接编辑数据库而不需要额外的层(在这种情况下是 UserManager)。如果你愿意,我有一些示例代码给你。 @CorstianBoerman 可能是与我一起工作的 UserStore 东西***.com/questions/28116426/… 【参考方案1】:

据我了解,您希望为用户定义自定义角色,我更喜欢在您的解决方案中添加库项目并通过此管理所有成员资格和角色。

Custom Asp.Net Membership

我会为此制作图书馆项目,如果你愿意,我会提供给你

【讨论】:

我已经编写了逻辑来创建自定义角色等等。现在唯一的问题是我需要将这些角色附加到我的应用程序的用户。我不能通过使用实体框架来做到这一点,因为我没有角色的实体,或者等等,我该怎么办?我只是在想,实现我想要的最好的方法可能是手动将这两个实体与实体框架连接起来。我要试试。 :) 是的,你应该让角色和用户角色分开实体 当然了!每个用户都隶属于一个公司,在该公司上也可以定义角色和角色组。 (模型中未显示)用户自动继承这些角色。

以上是关于向用户 ASP.NET 身份添加自定义角色的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core 身份中的角色声明与自定义身份验证中的角色权限相比

ASP.NET MVC 表单身份验证 + 授权属性 + 简单角色

在 asp 中用于 Windows 身份验证的简单自定义角色。网?

ASP.NET Core 使用 JWT 自定义角色/策略授权需要实现的接口

Asp.net 身份 - 如何维护登录的用户角色?

ASP.NET 在使用 Windows 身份验证和自定义角色提供程序时实现“充当”功能