2011-09-08 58 views
1

我在ASP.NET 2中創建HttpModule。模塊需要根據請求的路徑是公有還是受保護來執行不同的邏輯。 web.config使用<system.web><authorization>標籤和幾個<location>標籤設置授權。以編程方式確定路徑是否受限制

有沒有辦法讓HttpModule找出當前請求的路徑是否受保護?我不想在代碼中硬編碼值。

回答

3

如果您使用標準authentication/authorization那麼您可以使用CheckUrlAccessForPrincipal

UrlAuthorizationModule.CheckUrlAccessForPrincipal(virtualPath, user, verb); 
+0

是的,我正在使用sta ndard配置模式。謝謝! – Jeff

1

沒有直接的方法來查看文件系統條目並獲得您的有效權限。並計算在文件或目錄上設置的有效權限是...複雜的(這將是一種禮貌的方式)。

似乎是這樣一個非常明顯的信息,System.IO類應該提供,但顯然CLR團隊並不這麼認爲。我認爲問題的一部分是固有的競爭條件。給定對象的權限是動態的,可以隨時改變。他們甚至可能會在您的權限檢查和實際訪問對象之間進行更改,導致引發異常。

這些問題有一定的幫助:

最簡單的方法就是要求你想要的權限,捕捉異常,如果你沒有他們,用返回一個bool是/否值:

// you'll need access to the namespace namespace System.Security.Permissions 
public bool HasAccess(string path , FileIOPermissionAccess accessDesired) 
{ 
    bool isGranted ; 

    try 
    { 
    FileIOPermission permission = new FileIOPermission(accessDesired , path) ; 

    permission.Demand() ; 

    isGranted = true ; 

    } 
    catch 
    { 
    isGranted = false ; 
    } 

    return isGranted ; 
} 
相關問題