欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » ASP.Net » 正文

热门阅读

asp.net中Forms验证时如何设置用户角色

创建时间:2012年11月06日 16:01  阅读次数:(14962)
分享到:
可能我们在刚接触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
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论1条
  • #1楼  评论人:小菜  评论时间:2013-4-19 9:15:00
  • 谢谢了,讲解的很好。
发表评论:
留言人:
内  容:
请输入问题 10+31=? 的结果(结果是:41)
结  果: