MVC5 中的授权/角色

Posted

技术标签:

【中文标题】MVC5 中的授权/角色【英文标题】:Authorization/Roles in MVC5 【发布时间】:2014-01-17 15:54:16 【问题描述】:

我在使用 MVC5 (VS2013) 中的授权/角色时遇到问题。

身份验证几乎是开箱即用的(也就是说,只需使用 Visual Studio 创建默认的 MVC 项目)。我将DefaultConnection 连接字符串更改为有效(但不存在)的数据库。然后我注册一个新用户并自动创建数据库,其中包含AspNetUsersAspNetRoles 等表。

但是,我似乎对角色无能为力。首先要做的似乎是使用 C# 代码添加一个角色,例如:

Roles.CreateRole("Admin");

我收到一条异常消息:

'角色管理器功能尚未启用。'

我在 web.config 中启用它:

<roleManager enabled="true"/>

现在得到异常:

'无法连接到 SQL Server 数据库。'

这曾经很容易与 System.Web.Security.SqlRoleProvider 一起工作,但不适用于 MVC5 默认提供的新提供程序。关于这方面有很多非常复杂的文章,但在我看来,它是如此重要和直接,必须有一种简单的方法让它发挥作用。

非常感谢您的帮助。

【问题讨论】:

你有没有想过这个问题? 【参考方案1】:

我现在已经解决了这个问题。事实证明,Roles 类与 MVC5 中的角色管理完全无关,至少在开箱即用的配置方面是这样。

Roles 类和 Membership 类仍然存在,Provider 配置为 SqlMembershipProvider

但是,这不是AccountController 使用的提供程序,它根本不使用Membership 类;它使用Microsoft.AspNet.Identity.UserManager

虽然生成的AccountController 提供了大量使用UserManager 的示例,但它与角色无关。

角色的等效类是Microsoft.AspNet.Identity.RoleManager。在MSDN中有完整的文档@

【讨论】:

【参考方案2】:

我建议参考这个article,因为它展示了如何创建角色。创建所需的任何角色后,您可以使用 UserManager.AddToRole 或 UserManager.AddToRoleAsync 方法将用户添加到特定角色。

【讨论】:

以上是关于MVC5 中的授权/角色的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MVC 5 中设置本地授权身份验证?

关于 ASP.NET Core 中的授权

在 ASP.NET Core 中的每个操作之前查询数据库以获得角色授权

身份验证/授权 MVC 5 和 Web API - Katana/Owin

如何在asp.net mvc 5身份中的授权属性中使用动态角色

Oracle Apex 中的授权和用户角色?