ASP.NET身份驗證機制membership入門——配置篇(2)

轉載出自:http://www.cnblogs.com/xlb2000/archive/2010/05/12/1733514.html

    上篇講到如何配置membership以及ASP.NET Forms身份驗證,本篇將對權限控制部分,作一個詳細的解釋。html

    

    在全部的基本配置都完畢後,咱們還須要配置哪些目錄容許被匿名訪問,哪些是須要用戶登陸後容許訪問的頁面。web

    首先:咱們在項目中創建一個admin文件夾,在admin文件夾中添加一個web.config文件,而後在其中的<system.web>節點下面添加以下代碼:app

< authorization >
    
< allow  users ="admin" />
    
< deny  users ="*" />
</ authorization >

 

    而後咱們在admin目錄下再添加一個頁面,而後訪問該頁面,看一下效果。若是您按照咱們上篇所說的內容所有正確配置了,那麼你會發現,頁面並無顯示出來,而是跳轉到了咱們以前在<authentication>下<forms>節點的LoginUrl屬性所指向的頁面,要求登陸!這不就是咱們須要的效果嗎?ide

 

    如今來解釋一下上面配置的含義:post

    <allow>節點:顧名思義就是容許訪問的意思,<allow users="admin"/>就是容許用戶名爲"admin"的用戶訪問。編碼

           <deny>節點:就是禁止訪問。這裏用到了一個通配符「*」,通配符有兩個:*表明全部用戶,還有一個「?」表明全部匿名用戶。因此<deny users="*"/>就是不容許全部用戶訪問的意思啦,固然若是是:<deny users="?"/>那意思就是不容許全部匿名用戶訪問。url

           須要說明的是:全部的配置都是按照從上到下的順序來匹配的,一但匹配成功,就再也不向下匹配。舉個例子:spa

< authorization >
    
< allow  users ="admin" />
    
< allow  users ="zhangsan" />
    
< deny  users ="*" />
</ authorization >

           ASP.NET首先檢測當前登陸的用戶名=="admin"?若是等於則不繼續判斷,直接容許該用戶訪問。若是不等於則繼續判斷當前登陸的用戶名=="zhangsan"等於,則容許訪問,不等於則接着向下,讀取到了<deny users="*"/>這個配置,拒絕全部用戶訪問,跳轉到LoginUrl指定的頁面要求從新登陸。code

 

    但是若是這樣,只能實現目錄一級的權限控制,若是要控制某個文件的訪問權限,又該如何作呢?難道非得把這個文件放到一個文件夾中,而後再添加web.config進行控制麼?答案是否認的,對於單個文件的訪問控制,ASP.NET也有相應的配置:orm

複製代碼
< configuration >
    
< location  path ="a.aspx" >
      
< system.web >
        
< authorization >
          
< deny  users ="?" />
        
</ authorization >
      
</ system.web >
    
</ location >

    
< system.web >
      
< authorization >
        
< allow  users ="admin" />
        
< allow  users ="zhangsan" />
        
< deny  users ="*" />
      
</ authorization >
    
</ system.web >
</ configuration >
複製代碼

 

    看上面這個配置,咱們能夠在<system.web>節點之上(必須是上面)再增長一個<location>節點,經過path屬性指明location內的配置是單獨針對哪一個文件便可。具體內容我就很少說了,想必你們也都看得懂。不過須要注意的一點就是:location節點能夠有多個。這意味着同一個目錄下的不一樣文件能夠有不一樣的訪問權限。

 

    好了,配置到這裏算是完成一多半了。還有一個問題就是:若是咱們的用戶比較多,那麼須要在配置文件中把這些用戶所有羅列其中。而且之後添加 了新用戶,還得繼續修改配置,太麻煩了!該怎麼辦呢?通用的作法就是引入角色的概念。給全部的用戶分配一個角色,好比:users,admin等。而後我 們只須要控制這些角色的訪問權限便可。之後添加了新用戶只需給這個新用戶分配角色,而不用去修改配置,實在是方便。其實,membership也提供了角 色的概念,只須要簡單的配置一下就能夠實現了。

    要實現角色功能,很是簡單,咱們仍是去machine.config的<system.web>節點下面找 到<roleManager>節點,而後整個節點複製過來到web.config中去,通常會有兩個<add>子結點,咱們刪除 一個,留下一個就能夠了。所有內容以下:

複製代碼
< roleManager >
  
< providers >
    
< add  name ="AspNetSqlRoleProvider"
         connectionStringName
="LocalSqlServer"
         applicationName
="/"  
         type
="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"   />
  
</ providers >
</ roleManager >
複製代碼

 

    這個配置比較簡單,各項配置和前面配置都同樣,再也不多說。稍微修改一下:

複製代碼
< roleManager  enabled ="true"  defaultProvider ="myAspNetSqlRoleProvider" >
  
< providers >
    
< add  name ="myAspNetSqlRoleProvider"
         connectionStringName
="ConnectionString"
         applicationName
="TestMembership"  
         type
="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"   />
  
</ providers >
</ roleManager >
複製代碼

 

    注意:這個roleManager多了個屬性enable="true",這是由於角色管理默認狀況下是關閉的,因此咱們必須得設置爲開啓才行。

 

    好了,全部的配置到這裏算是所有結束了。欲知後事如何且聽下回分解:《ASP.NET身份驗證機制membership入門——編碼篇》。

相關文章
相關標籤/搜索