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

來源:互聯網
上載者:User

    上篇講到如何配置membership以及ASP.NET Forms身分識別驗證,本篇將對許可權控制部分,做一個詳細的解釋。

    

    在所有的基本配置都完畢後,我們還需要配置哪些目錄允許被匿名訪問,哪些是需要使用者登入後允許訪問的頁面。

    首先:我們在項目中建立一個admin檔案夾,在admin檔案夾中添加一個web.config檔案,然後在其中的<system.web>節點下面添加如下代碼:

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

 

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

 

    現在來解釋一下上面配置的含義:

    <allow>節點:顧名思義就是允許訪問的意思,<allow users="admin"/>就是允許使用者名稱為"admin"的使用者訪問。

           <deny>節點:就是禁止訪問。這裡用到了一個萬用字元“*”,萬用字元有兩個:*代表所有使用者,還有一個“?”代表所有匿名使用者。所以<deny users="*"/>就是不允許所有使用者訪問的意思啦,當然如果是:<deny users="?"/>那意思就是不允許所有匿名使用者存取。

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

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

           ASP.NET首先檢測當前登入的使用者名稱=="admin"?如果等於則不繼續判斷,直接允許該使用者訪問。如果不等於則繼續判斷當前登入的使用者名稱=="zhangsan"等於,則允許訪問,不等於則接著向下,讀取到了<deny users="*"/>這個配置,拒絕所有使用者訪問,跳轉到LoginUrl指定的頁面要求重新登入。

 

    可是如果這樣,只能實現目錄一級的許可權控制,如果要控制某個檔案的存取權限,又該如何做呢?難道非得把這個檔案放到一個檔案夾中,然後再添加web.config進行控制嗎?答案是否定的,對於單個檔案的存取控制,ASP.NET也有相應的配置:

<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入門——編碼篇》。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.