• 欢迎访问奇跡の海网站,本站不上传任何资源,所有资源均来自于网络,欢迎加入奇跡の海~!奇跡の海-WordPress QQ群
  • 本站下载资源为网络上收集整理而来,并且以计算机技术研究交流为目的,版权归原作者所有,仅供大家参考,学习,不存在任何商业目的与商业用途.
  • 本站系统镜像均来自于官方原版,ed2k可视为P2P下载链接。所有操作系统默认均为试用版,如有正版密钥可以有效激活,本站不提供任何激活和相关服务。

web.config设置文件夹访问权限

WEB服务 奇跡の海 2年前 (2017-08-26) 484次浏览 已收录 0个评论 扫描二维码

web.config设置文件夹访问权限

问题描述

系统有个Setting文件夹,存在于根目录下
系统根目录下还有个web.config文件

<authentication mode="Forms">
    <forms loginUrl="/Login.aspx" name=".ASPXFORMSAUTH" timeout="45" defaultUrl="/Default.aspx"></forms>
</authentication>
<authorization>
    <deny users="?"></deny>
</authorization>

设置必须登录才能访问
但是Setting文件夹只能系统管理员才能访问,是否为系统管理员是数据库中的一个字段来判断的?

解决方法

web.config文件配置:

<system.web>
<authentication mode="Forms">
    <forms loginUrl="/Login.aspx" name=".ASPXFORMSAUTH" timeout="45" defaultUrl="/Default.aspx"></forms>
    </authentication>
    <authorization>
    <deny users="?"></deny>
</authorization>
</system.web>
<location path="Setting">
    <system.web>
      <authorization>
        <allow roles="Admin"/>
        <deny users="*"/>
      </authorization>
    </system.web>
</location>

Login.aspx代码:

protected void btnSubmit_Click(object sender, EventArgs e)
        {
            if (this.txtUserName.Text == "admin" && this.txtPassword.Text == "123")
            {
                SetLoginCookie("Admin");
            }
            else if (this.txtUserName.Text == "kaka" && this.txtPassword.Text == "123")
            {
                SetLoginCookie("No");
            }
            Response.Redirect(FormsAuthentication.GetRedirectUrl(this.txtUserName.Text, false));
        }

 public static void SetLoginCookie(string roles)
        {
            //建立身份验证票对象
            FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, "admin", DateTime.Now, DateTime.Now.AddMinutes(30), false, roles);
            //加密序列化验证票为字符串
            string hashTicket = FormsAuthentication.Encrypt(ticket);
            HttpCookie userCookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashTicket);
            HttpContext.Current.Response.Cookies.Add(userCookie);
        }
Global.asax文件代码:
protected void Application_AuthenticateRequest(object sender, EventArgs e)
        {
            HttpApplication app = (HttpApplication)sender;
            HttpContext ctx = app.Context; //获取本次Http请求的HttpContext对象  
            if (ctx.User != null)
            {
                if (ctx.Request.IsAuthenticated == true) //验证过的一般用户才能进行角色验证  
                {
                    System.Web.Security.FormsIdentity fi = (System.Web.Security.FormsIdentity)ctx.User.Identity;
                    System.Web.Security.FormsAuthenticationTicket ticket = fi.Ticket; //取得身份验证票  
                    string userData = ticket.UserData;//从UserData中恢复role信息
                    string[] roles = userData.Split(','); //将角色数据转成字符串数组,得到相关的角色信息  
                    ctx.User = new System.Security.Principal.GenericPrincipal(fi, roles); //这样当前用户就拥有角色信息了
                }
            }
        }

PS

完全没有必要使用MemberShip MemberShipUser Roles类这些复杂的东西,使用节点配置setting文件夹即可。然后再使用. IsInRole 方法 判断即可

<location   path="Setting">   
        <system.web>   
            <authorization>   
                <allow   roles="admin"   />   
                <deny   users="*"   />   
            </authorization>   
        </system.web>   
  </location>   

你可以搜索网上基于角色的验证,本论坛也贴过这样的代码。

转自:微软


版权声明:本站所有文章和资源使用CC BY-NC-SA 4.0协议授权发布 , 转载应当以相同方式注明文章来自“SeaOMC.COM->web.config设置文件夹访问权限!在下边可以分享本文哦!
喜欢 (0)
[]
分享 (0)
奇跡の海
关于作者:
一个WordPress菜鸟!
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址