打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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

        }

 

    }

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
翻译:Single Sign-On for Everyone - Anders Liu的.NET空间 - 博客园
FormsAuthenticationTicket对象
细说ASP.NET Forms身份认证
Asp
ASP.NET实现不同用户使用不同登录界面
Asp.Net基于forms的验证机制
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服