1

我有一个 Asp.Net MVC 5 应用程序。我想使用用户角色仅授权某些人使用特定操作。我已经Web.config像这样更改了我的文件:

<roleManager enabled="true"/>
<membership defaultProvider="SimpleMembershipProvider">
  <providers>
    <clear/>
    <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" />
  </providers>
</membership>

这就是我将用户添加到角色的方式:

if (!await Roles.RoleExists(role))
    await Roles.CreateRole(new Role(role));
await Roles.AddUserToRole(role, user.Id);

目前,我可以使用以下代码通过代码访问用户的角色:

    public static async Task<IEnumerable<string>> GetUserRoles(string username)
    {
        if (string.IsNullOrEmpty(username))
            return new string[0];
        string userId = await Logins.GetUserId(IdentityConfig.LocalLoginProvider, username);
        var roles = await Roles.GetRolesForUser(userId);
        return roles;
    }

但是,当我尝试使用该Authorize属性访问角色时,页面会卡住并且没有加载任何内容。

[Authorize(Roles = "Admin")]
public ActionResult Index()
{
    return View(db.Restaurants.ToList());
}

我在这里做错了什么?

更新:

一段时间后,网页将显示此错误:

Asp.Net 错误页面

4

3 回答 3

2

您不能真正将旧的成员资格/角色与新的身份系统混合在一起。你需要选择一个或另一个。假设您通过新的身份 api 将用户添加到管理员角色,授权属性应该可以正常工作。

底部,本文演示角色Mvc5 教程

于 2013-09-17T18:57:40.963 回答
1

我有同样的问题,它与您的连接字符串无关。将以下内容添加到您的 web.config 中:

这是答案:http ://blog.luppes.com/2013/12/08/mvc5-authentication-roles-failure/

于 2014-02-17T17:29:40.920 回答
0

从 ASP.NET 4.5.1/VS2013 开始,MVC 从 MVC5 开始不再是一个单独的产品,而是现在完全集成到 ASP.NET 中。这是微软新的 One ASP.NET 战略的一部分。

除此之外,微软还开发了一种名为 ASP.NET Identity 的新型身份管理系统,它不使用旧的成员资格系统。

基本上,如果要使用旧的会员系统,则需要使用 MVC4 或更早版本。如果你想使用 ASP.NET Identity,那么 MVC5。

于 2013-09-17T20:51:45.680 回答