可能我们在刚接触asp.net的时候,记录登陆用户及用户角色等信息都是用一个Session存储起来,需要作判断的时候,再读取这个
Session值。这个方法简单方便,也是不错的。但这节我们主要讲解在asp.net的forms验证模式时,如何利用User对象来取的登陆用户名与用户角色。
首先和用Session一样,都要验证用户与密码的正确性……,这个都是通用的,要不然怎么会知道这个用户是合法的呢?然后就是存储用户和角色的方法了。
为方便起见,我们这里只定义两种角色,并用枚举的方式定义,方便使用:
public enum eUserRoles
{
general,//普通用户
manager//管理员
}
然后在登陆按钮的事件中设置用户票证及存储Cookies:
protected void on_sure_click(object sender, EventArgs e)
{
……验证用户名与密码的代码,略过,假设已经验证通过了。
//创建一个新的票证,要注意这个构造函数中最后一个参数我们把用户角色传进去了,从这个构造函数的说明中我们可以了解到,这个参数是用户定义的数据,票证本身是不明白些数据的意义的,我们在后面的代码中还需要对这个数据进行处理。
//注意,这个用户角色是我们假设的,真实情况下,你可能是根据用户名从数据库取到的用户角色。
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, "用户名", DateTime.Now,
DateTime.Now.AddDays(30), false, eUserRoles.general.ToString());
//创建一个字符串,这个字符串包含适用于 HTTPCookie 的加密的Forms身份验证票证信息。
string hashticket = FormsAuthentication.Encrypt(ticket);
//利用上面的字符串,创建Cookie,并输出Cookie
HttpCookie usercookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashticket);
Response.Cookies.Add(usercookie);
}
好了,应用程序执行过上面这段代码后,我们再访问该应用程序的任何一个页面时都会将这个身份cookie一起发送到服务端,然后服务器就知道我们有没有经过验证了。
但细心的大家应该已经发现了,到现在为止,我们并没有为该用户赋予角色值啊,服务器怎么会知道该用户的角色呢?是的,到这个时候,服务器还并不知道该用户的角色,我们还需要在Global.asax文件中的
Application_AuthenticateRequest事件中完成下面的代码,这个事件是在安全模块已建立用户标识时发生。
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
//判断当前用户有没有进行登陆
if (HttpContext.Current.User != null)
{
//判断是不是由Forms方式登陆
if (HttpContext.Current.User.Identity is FormsIdentity)
{
FormsIdentity id = HttpContext.Current.User.Identity as FormsIdentity;
FormsAuthenticationTicket ticket = id.Ticket;//取到当前的票证
string userdate = ticket.UserData;//取到当前票证中的自定义数据,这个自定义数据就是我们在上面赋予的角色信息
string[] roles = userdate.Split(',');//因为可以给一个用户赋予多个角色,所以我们用一个关键字把多个角色组成一个字符数组。
//利用当前的用户信息与角色信息重新初始化当前的用户信息
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id, roles);
}
}
}
到这里,我们就可以在需要判断用户角色的地方使用User.IsInRole来判断角色了。比如:
protected void on_sure_click1(object sender, EventArgs e)
{
if (User.IsInRole(eUserRoles.manager.ToString()))
{
Response.Write("我是管理员角色");
}
else if (User.IsInRole(eUserRoles.general.ToString()))
{
Response.Write("我是普通用户角色");
}
else
{
Response.Write("我不属于任何角色");
}
}
到这里,asp.net中
Forms验证时如何设置
用户角色的功能就完成了。还要注意一点的就是,如果要实现Forms验证方式,一定要记得修改web.config的配置文件哦,示例如下:
<authentication mode="Forms">
<forms name="forums" path="/" loginUrl="WebForm3.aspx" protection="All" timeout="14400"></forms>
</authentication>
Pb霳O裇皊
N筽鸔Y\!kB