授权(角色=“管理员”)不起作用

时间:2016-01-16 19:16:33

标签: c# asp.net asp.net-mvc asp.net-identity

我正在使用Identity作为授权引擎编写ASP.NET应用程序。我编写了自定义用户和角色存储,它们似乎正常工作。但是,由于某些未知原因,尝试在控制器操作上使用Authorize角色失败并重定向到Home/Index。该操作如下所示:

[Authorize(Roles = "Admin")]
public ActionResult Manage()
{
    return View();
}

重定向是以静默方式完成的,因此我无法将调试器挂钩到任何地方(尤其是在运行操作之前正在执行动作过滤)。

我想这可能不足以诊断问题,所以请在评论中告诉我,您需要哪些其他信息,我会编辑问题。

为什么不起作用?

编辑:Startup.cs中的配置

    public void Configuration(IAppBuilder app)
    {
        DataProtectionProvider = app.GetDataProtectionProvider();

        app.CreatePerOwinContext<ApplicationUserManager>(() => DependencyResolver.Current.GetService<ApplicationUserManager>());

        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = "ApplicationCookie",
            LoginPath = new PathString("/Account/Login")
        });            
    }

编辑:另一项行动:

    [AllowAnonymous]
    public async Task<ActionResult> Index()
    {
        // This returns FALSE
        if (User.IsInRole("Admin"))
            System.Diagnostics.Debug.WriteLine("Ok");

        var userManager = UnityConfig.Container.Resolve<ApplicationUserManager>();
        // This returns TRUE
        if (await userManager.IsInRoleAsync(User.Identity.GetUserId<int>(), "Admin"))
            System.Diagnostics.Debug.WriteLine("Ok");

        return View();
    }

1 个答案:

答案 0 :(得分:2)

要检查的几件事情:

  1. 登录页面设置为什么?我猜你是未经身份验证或未经授权,MVC正在将你发送到登录页面(可能是设置或默认为“/”
  2. 如果您确定已登录(已通过身份验证),请仔细检查您的用户是否确实具有管理员角色(已获得授权)。
  3. 我相信用户商店有一个方法可以覆盖,看看为用户的角色返回了什么。可能值得在那里设置一个断点,看看发生了什么。