none
如何让用户登录后管理不同的目录? RRS feed

  • 问题

  • <?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好像没有建立角色名称的功能?请问怎么才能让用户各访问各的目录呢?

    2010年2月6日 7:52

答案

  • 终于找到答案了,这两天真是折磨人呀。现在贴出来大家看看,希望对兄弟们有所帮助。方法是在网站下面创建一个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); } } } }

     

    2010年2月7日 19:02

全部回复

  • 谢谢 开心 回复,不过你给的这个页面只是讲web.config中怎么设置,感觉和我的一样吧。其中具体的实例请参考:“ Forms验证 http://www.fanvb.net/websample/dataauth.aspx ”打不开了,比较郁闷。


    我现在比较想知道如何将角色名称写入Cookie文件中,让<allow roles="administers,admins"/>这句话起到作用。

    • 已编辑 hkstb 2010年2月6日 12:48 打错了
    2010年2月6日 12:47
  • 谢谢 mldark 回复,咱水平有限,啃了半天也没有想通如何使用RoleProvider类实现目录权限的分配?能否给讲讲,或给个大致代码?谢谢
    2010年2月6日 16:04
  • 终于找到答案了,这两天真是折磨人呀。现在贴出来大家看看,希望对兄弟们有所帮助。方法是在网站下面创建一个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); } } } }

     

    2010年2月7日 19:02