<?xml version="1.0"?>
<configuration>
<system.web>
<!--
            通过 <authentication> 节可以配置 ASP.NET 用来 
            识别进入用户的
            安全身份验证模式。 
        -->
<authentication mode="Forms">
<forms name=".AYSDLJTAQXH" loginUrl="login.aspx" >
<credentials passwordFormat="SHA1"/>
</forms>
</authentication>
</system.web>
<!--锁定指定目录-->
     <location path="Administer">
<system.web>
<authorization>
<allow roles="administers,admins"/>
<deny users="?"/>
</authorization>
</system.web>
</location>
<location path="Member">
<system.web>
<authorization>
<allow roles="administers,members"/>
<deny users="?"/>
</authorization>
</system.web>
</location>
</configuration>
在web.config中,我使用Forms验证模式。
<location path="Administer">和<location path="Member">分别是要锁定的目录。
<allow roles="administers,admins"/>和<allow roles="administers,members"/>是允许哪些角色名称有限访问。看到web.config中的信息,相信大家已经了解我的用意。我想admins用户只能访问Administer目录,members用户只能访问Member目录,而administers能访问所有目录。我有一个Cookie.cs文件用来保存Cookie文件。在Cookie文件中使用FormsAuthenticationTicket建立身份验证票对象我现在的问题是,不管什么用户只要登录成功就能访问任何目录。<allow roles="administers,admins"/>和<allow roles="administers,members"/>好像没有起到作用。后来发现FormsAuthenticationTicket好像没有建立角色名称的功能?请问怎么才能让用户各访问各的目录呢?

解决方案 »

  1.   

    改成<deny users="*"/>拒绝所有你现在<deny users="?"/>就是只要登录的就可以访问的意思。
      

  2.   

    在写 票证时 ,要把角色写进去
     FormsAuthenticationTicket ticket=new FormsAuthenticationTicket (1,loginId,DateTime.Now,DateTime.Now.AddMinutes(30),false,userRole,"/");
      

  3.   

    终于找到答案了,这两天真是折磨人呀。现在贴出来大家看看,希望对兄弟们有所帮助。
    先感谢一下 imfor 的回复,他说的不错,这是第一点。
    再感谢 hanyise520 的回复,虽然我知道,但是要给兄弟们说一下,这也很重要,这是第二点。
    第三点就是在网站下面创建一个Global.asax文件来识别票证中的用户角色。在其中添加如下方法。 
    void Application_AuthenticateRequest(object sender, EventArgs e)
        {        if (HttpContext.Current.User != null)
            {
                if (HttpContext.Current.User.Identity.IsAuthenticated)
                {
                    if (HttpContext.Current.User.Identity is FormsIdentity)
                    {
                        string userData;
                        string[] roles;                    userData = string.Empty;
                        try
                        {
                            if (Request.Cookies[".AYSDLJTAQXH"] != null)
                            {
                                FormsAuthenticationTicket ticket =
                                    FormsAuthentication.Decrypt(Request.Cookies[".AYSDLJTAQXH"].Value);
                                if (ticket != null)
                                {
                                    userData = ticket.UserData;
                                }
                            }
                        }
                        catch (Exception E)
                        {
                            HttpContext.Current.Response.Write("<!-- " + E.Message + " -->");
                        }
                        roles = userData.Split(',');
                        HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(HttpContext.Current.User.Identity, roles);
                    }
                }
            }
        }