我在ASP.NET MVC 5中工作,我正在使用ASP.NET Identity。我已按照LukeP的solution here访问我的ApplicationUser
自定义属性(例如User.DisplayUsername
或User.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角色的用户也被允许访问。我知道为什么会这样,但只是不知道如何解决这个问题。
我怎样才能让它按预期工作?