2012-12-28 27 views
3

我正在使用MembershipProvider,目前有3個角色: 用戶,超級用戶,管理員。管理用戶對ASP.NET中頁面的訪問

此外,我有隻能由管理員和超級用戶才能看到的頁面。 對於這些網頁中的web配置一個我使用的配置:

<location path="Users.aspx"> 
    <system.web> 
     <authorization> 
     <allow roles="Admin, Super User"/> 
     <deny users="*" /> 
     </authorization> 
    </system.web> 
    </location> 

這工作完全正常。

但我有一堆

Evaluations 
Actions 
Reports 
Files 

頁面我想單獨訪問哪些。我希望單獨授予每個頁面的訪問權限。

是否有更好的方式來創建它,而不是爲每個頁面創建角色並分配給這些角色?

P.S. 我正在使用ASP.NET,而不是MVC

+1

不知道如果你使用MVC或不(不guesing),但我延長'AuthorizeAttribute'這裏查看個人權限,而不是角色,可能會有所幫助:http://stackoverflow.com/a/11145719/1324019 – Mansfield

回答

2

是,修改文件夾結構是這樣的:

- Super User 
    - Admin 
    - All 

然後你就可以做這樣的東西:

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

<location path="Super User/Admin"> 
    <system.web> 
    <authorization> 
     <allow roles="Admin"/> 
     <deny users="*" /> 
    </authorization> 
    </system.web> 
</location> 

<location path="Super User/Admin/All"> 
    <system.web> 
    <authorization> 
     <allow users="*" /> 
    </authorization> 
    </system.web> 
</location> 

而現在只需將相應的文件夾頁。根據MSDN Documentation,位置元素適用於所有子目錄:

指定包含的配置設置適用的資源。使用缺少路徑屬性的位置將配置設置應用於當前目錄和所有子目錄。如果使用位置時沒有路徑屬性,並且allowOverride爲False,則配置設置不能由位於子目錄中的Web.config文件更改。

因此Super User根據定義將有權訪問下面的所有其他頁面等。

1

是的,有一個更好更簡單的方法。將所有受限制的頁面放在一個單獨的文件夾中,並在該文件夾中創建一個附加的web.config。這個額外的web.config只能包含授權部分。

運行時將評估您的web.configs從請求文件夾到應用程序根目錄。由於授權部分存在於此額外的web.config中,它將覆蓋您的根授權部分。

這樣一個設置(單個web.config)可以防護任意數量的文件(目錄中的所有文件)。

1

您也可以使用<location>元素代替對文件夾的權限。這樣,您可以將一堆頁面分組到一個權限集中。此外,您可以驗證代碼中的權限;在global.asax中,application_postauthenticaterequest針對服務器的每個請求運行(因此對於每個aspx頁面),並且您可以在此處編寫代碼以進行驗證,並在用戶沒有權限時將其重定向。

相關問題