使用ASP.NET标识的AuthorizeAttribute

jan*_*ann 9 c# asp.net-mvc asp.net-roles asp.net-identity

我有一个受[Authorize]属性保护的控制器.

这非常好(如果我没有登录,我会被发回登录),但是我希望为这个属性添加一些角色,我已经读过它可能做的事情[Authorize(Roles = "Customer"],但当我这样做时,我立即发送回到我的应用程序的登录页面?

Roles覆盖不适用于新的ASP.NET标识吗?在我的用户创建中,我通过以下代码将用户添加到:

var user = new ApplicationUser {UserName = model.Username};
var result = UserManager.Create(user, model.Password);
if (result.Succeeded)
{
    UserManager.AddToRole(user.Id, "Customer");
    SignIn(user, false);

    return RedirectToAction("Done");
}
Run Code Online (Sandbox Code Playgroud)

并且根据数据库,用户处于此角色.为什么这不起作用?我错过了配置还是某种?

jan*_*ann 9

我将回答我自己的问题.

这不起作用的原因(挖掘数小时)是因为我的背景有以下几点:

Configuration.ProxyCreationEnabled = false;
Run Code Online (Sandbox Code Playgroud)

这使得懒惰加载被禁用,因此在加载用户时不包括角色!

所以解决方法是启用此功能或删除该行.

更新时间:2015-05-01

这是一个在2.0.0-alpha1版本中修复的错误.因此,此解决方法不再需要继续,并且无论此设置如何,角色都将加载.

Identity Owin是否需要LazyLoading?

  • 哇!遇到了同样的问题,昨晚花了很多时间试图弄清楚为什么索赔没有为用户角色加载!很棒,谢谢! (2认同)