webconfig权限控制(转)

今天偶然看了一篇关于Forms应用的文章收益颇多,写出来给大家分享。

   说起对网站权限,记得以前做法是每个页面都进行判断,对webconfig 的使用少之又少今天说说webconfig 对网站权限的判断。

   户文件夹(我们暂定user文件夹):只有用户登录以后才能访问。否则该访客只能访问user文件夹的登录页面(user_login.aspx)

管理员文件夹( 暂定admin文件夹):管理员文件夹不让任何人服务,当用户登录以后只能访问管理员登陆页(admin_login.aspx),管理员登陆后才能访问全部页面。

根目录:根目录可以让任何人访问。

 

目录结构如下:

 

 

 

 

 

第一步:

    根目录下config代码:

     <authentication mode="Forms">     

       <forms name="UserCookies" loginUrl="Default.aspx"></forms>

      </authentication>

      <authorization>

        <allow users="*"/>

      </authorization>

 

第二部:

    Global.asax

    头部添加 

     <%@ Import Namespace="System.Security.Principal" %>

 

 

     void Application_AuthenticateRequest(object sender, EventArgs e)

    {

        if (HttpContext.Current.User != null)

        {

            //如果用户通过验证,则该项不为null

            if (HttpContext.Current.User.Identity.IsAuthenticated)

            {

                if (HttpContext.Current.User.Identity is FormsIdentity)

                {

                    FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;

                    FormsAuthenticationTicket ticket = id.Ticket;

 

                    string userData = ticket.UserData;//取出角色数据

                    string[] roles = userData.Split(',');

                    HttpContext.Current.User = new GenericPrincipal(id, roles);//重新分配角色

                }

            }

        }

    }

 

第三部:

admin文件夹config 文件

 

<?xml version="1.0" encoding="utf-8"?>

<configuration>

<appSettings/>

<connectionStrings/>

<location path="admin_login.aspx">

    <system.web>

      <authorization>

        <allow roles="user"/>

      </authorization>

    </system.web>

</location>

<system.web>

    <authorization>

      <allow roles="admin"/>

      <deny users="*"/>

    </authorization>

</system.web>

</configuration>

 

admin_login.aspx

 

 

 

cs 代码如下:

protected void Button1_Click(object sender, EventArgs e)

    {

        if (tbUserName.Text == "xiaomiao")

        {

            //生成验证票据,其中包括用户名、生效时间、过期时间、是否永久保存和用户数据等。而关于用户角色的信息,我们保存在用户数据中。

            FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, tbUserName.Text, DateTime.Now, DateTime.Now.AddMinutes(30), true, "Admin");

            string cookieStr = FormsAuthentication.Encrypt(ticket);//对票据进行加密

            HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, cookieStr);

            /*保存到cookie中。cookie的名字要与我们前面在配置文件中所写的name值一样。因为,当cookie保留在本地后,下次再检查用户权限的时候就会自动查找与forms名称相同的cookie,并传送给服务器端进行检验。如果在本地找不到cookie,就自然无法通过验证。*/

            cookie.Expires = ticket.Expiration;

            cookie.Path = FormsAuthentication.FormsCookiePath;

            Response.Cookies.Add(cookie);

            Response.Redirect("default.aspx");//登陆成功后跳转到index.aspx

        }

    }

 

 

第四步:

 

user文件夹config代码

<?xml version="1.0" encoding="utf-8"?>

<configuration>

    <appSettings/>

    <connectionStrings/>

<location path="user_login.aspx">

    <system.web>

      <authorization>

        <allow users="*"/>

      </authorization>

    </system.web>

</location>

    <system.web>

      <authorization>

        <allow roles="user,admin"/>

        <deny users="*"/>

      </authorization>

    </system.web>

</configuration>

 

user_login.aspx

 

 

 

CS代码:

protected void Page_Load(object sender, EventArgs e)

    {

        //判断用户是否已经登陆,且角色为user

        if (User.Identity.IsAuthenticated && User.IsInRole("user"))

        {//如果通过验证,则直接跳转到index.aspx

            Response.Redirect("default.aspx");

        }

    }

    protected void Button1_Click(object sender, EventArgs e)

    {

        if (tbUserName.Text == "xiaomiao")

        {

            //生成验证票据,其中包括用户名、生效时间、过期时间、是否永久保存和用户数据等。而关于用户角色的信息,我们保存在用户数据中。

            FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, tbUserName.Text, DateTime.Now, DateTime.Now.AddMinutes(30), true, "User");

            string cookieStr = FormsAuthentication.Encrypt(ticket);//对票据进行加密

            HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, cookieStr);

            /*保存到cookie中。cookie的名字要与我们前面在配置文件中所写的name值一样。因为,当cookie保留在本地后,下次再检查用户权限的时候就会自动查找与forms名称相同的cookie,并传送给服务器端进行检验。如果在本地找不到cookie,就自然无法通过验证。*/

            cookie.Expires = ticket.Expiration;

            cookie.Path = FormsAuthentication.FormsCookiePath;

            Response.Cookies.Add(cookie);

            Response.Redirect("default.aspx");//登陆成功后跳转到index.aspx

        }

 

    }

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值