我有一个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());
}
我在这里做错了什么?
一段时间后,网页会显示以下错误:
答案 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。