我在ASP.NET 2中創建HttpModule。模塊需要根據請求的路徑是公有還是受保護來執行不同的邏輯。 web.config使用<system.web><authorization>
標籤和幾個<location>
標籤設置授權。以編程方式確定路徑是否受限制
有沒有辦法讓HttpModule找出當前請求的路徑是否受保護?我不想在代碼中硬編碼值。
我在ASP.NET 2中創建HttpModule。模塊需要根據請求的路徑是公有還是受保護來執行不同的邏輯。 web.config使用<system.web><authorization>
標籤和幾個<location>
標籤設置授權。以編程方式確定路徑是否受限制
有沒有辦法讓HttpModule找出當前請求的路徑是否受保護?我不想在代碼中硬編碼值。
如果您使用標準authentication/authorization
那麼您可以使用CheckUrlAccessForPrincipal。
UrlAuthorizationModule.CheckUrlAccessForPrincipal(virtualPath, user, verb);
沒有直接的方法來查看文件系統條目並獲得您的有效權限。並計算在文件或目錄上設置的有效權限是...複雜的(這將是一種禮貌的方式)。
似乎是這樣一個非常明顯的信息,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 ;
}
是的,我正在使用sta ndard配置模式。謝謝! – Jeff