在我们的 MVC 应用程序中,我们绕过 RolesProvider,而只是将我们的角色缓存在将被传递的 cookie 中。根据互联网上的一些建议,我们正在利用该Application_AuthenticateRequest
事件,如下所示:
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
var user = HttpContext.Current.User;
if (user == null || !user.Identity.IsAuthenticated)
{
return;
}
// read the roles from the cookie and set a custom generic principal
var fi = (FormsIdentity)HttpContext.Current.User.Identity;
var httpCookie = HttpContext.Current.Request.Cookies["Roles"]; // custom cookie set during authentication
if (httpCookie != null)
{
string rolesCookie = httpCookie.Value;
var pmUserRoles = rolesCookie.Split(',');
GenericPrincipal gp = new GenericPrincipal(fi, pmUserRoles);
HttpContext.Current.User = gp;
}
}
我逐步完成了该方法,并在我们的一些角色中加入了几个条件,并且在设置当前用户后立即User.IsInRole("rolename")
工作,就像一个魅力。
但是,当尝试在视图中进行相同的调用时:
@if(Request.IsAuthenticated)
{
if (User.IsInRole("role1") || User.IsInRole("role2"))
{
<!-- show something -->
}
else if (User.IsInRole("role3"))
{
<!-- show something else -->
}
}
无法访问角色。当我此时深入研究用户时,看起来角色甚至不存在,就在我确认用户在AuthenticateRequest
事件结束时拥有它们之后。
这个问题有类似的问题,我打算在那里发表评论,但我想我不能因为我的低代表 - 但看起来这不仅仅是我的问题。
我还查看了具有类似方法的这个问题,但这给了我相同的结果。
对正在发生的事情有任何建议或意见吗?