ASP.NET MVC5中的CustomPrincipal.IsInRole

时间:2015-04-04 13:22:15

标签: asp.net-mvc-5 asp.net-identity roles iprincipal

我在ASP.NET MVC 5中工作,我正在使用ASP.NET Identity。我已按照LukeP的solution here访问我的ApplicationUser自定义属性(例如User.DisplayUsernameUser.DOB)。就像Luke建议的那样,我现在有一个自定义的IPrincipal实现(基本上与他完全相同的代码)。

然而,这有一个问题,我怀疑它与CustomPrincipal类上的这行代码有关:

public bool IsInRole(string role) { return false; }

我有一个名为ReviewController的控制器,在那里我有这个:

[Authorize(Roles = "Admin")]
public class ReviewController : Controller
{
    // controller stuff
}

这不起作用。即使我登录的用户是角色Admin。所以我尝试通过IsInRole方法改进代码:

public class CustomPrincipal : ICustomPrincipal
{
    public IIdentity Identity { get; private set; }

    public bool IsInRole(string role)
    {
        var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new BBContext()));
        return roleManager.Roles.All(r => r.Name == role);
    }

    public CustomPrincipal(string email)
    {
        this.Identity = new GenericIdentity(email);
    }

    public string Id { get; set; }
    public string DisplayUsername { get; set; }
    public DateTime DOB { get; set; }
}

从某种意义上来说,这已经提升了ReviewController。但是它仍然是错误的,因为即使不是Admin角色的用户也被允许访问。我知道为什么会这样,但只是不知道如何解决这个问题。

我怎样才能让它按预期工作?

0 个答案:

没有答案