RoleManager和SimpleMembershipProvider不能与AuthorizeAttribute一起使用

时间:2013-09-17 07:30:51

标签: asp.net simplemembership asp.net-mvc-5 asp.net-identity role-manager

我有一个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 error page

3 个答案:

答案 0 :(得分:2)

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

在底部,本文演示了角色Mvc5 tutorial

答案 1 :(得分:1)

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

           的      

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

答案 2 :(得分:0)

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

除此之外,Microsoft还开发了一种名为ASP.NET Identity的新型身份管理系统,该系统不使用旧式会员系统。

基本上,如果要使用旧的成员资格系统,则需要使用MVC4或更早版本。如果要使用ASP.NET Identity,则使用MVC5。