我可以使用以下方法找出当前用户是否处于特定角色:
HttpContext.Current.User.IsInRole("Administrator");
但HttpContext如何知道用户所处的角色?它存储在cookie中吗?如果是这样,该cookie是如何创建的?
答案 0 :(得分:2)
这取决于IPrincipal
中存储的HttpContext.Current.User
接口的实现。
如果您使用SqlMembership或Universal成员资格提供程序,我相信当您致电IsInRole("Administrator")
时,它会访问您的数据库。您可以使用SQL事件探查器进行检查。
顺便说一句,您可以将HttpContext.Current.User
属性设置为自己的实现
Application_PostAuthenticateRequest
方法。查看here了解更多信息。
更新: 让我澄清一下我的答案。 默认情况下,asp.net会抓住与成员资格提供者一起使用的角色提供程序因此,覆盖IsInRole行为的第一个选项是编写自己的角色提供程序(Look here for more information)。
另一种选择是编写自己的IPrincipal实现,如下所示:
public class CustomPrincipal : IPrincipal
{
public IIdentity Identity { get; private set; }
public bool IsInRole(string role) {
//Here goes your implementation of IsInRole
}
}
并将其挂钩在Global.asax
Application_PostAuthenticateRequest
方法:
protected void Application_PostAuthenticateRequest(Object sender, EventArgs e)
{
//here you need to check is user authenticated, also you have opportunity to work with authentication ticket
HttpContext.Current.User = new CustomPrincipal();
}