Asp.net
ASP.NET Forms Auth允許訪問子目錄中的特定文件,當所有其他文件都應該被拒絕時
我在允許特定角色訪問子目錄中的特定頁面時遇到問題。
我的 ASP.NET 應用程序有一個訪問受限的目錄 ~/Forms/Administration。有一個特定的文件 ~/Forms/Administration/Default.aspx 我想授予 1 個額外的使用者角色訪問權限,以及 Admin 角色。
在 ~/Forms/Administration 中,我有一個如下所示的 web.config 文件:
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.web> <authorization> <allow roles="Administrator, User" /> <deny users="*"/> </authorization> </system.web> <location path="Forms/Administration/Default.aspx"> <system.web> <authorization> <allow roles="Administrator, User, AdditionalUser" /> </authorization> </system.web> </location> </configuration>Admin 使用者工作得很好,但 AdditionalUser 總是失敗。我已經嘗試了很多事情 - 將位置列為
<location path="Forms/Administration/Default.aspx">並作為
<location path="~/Forms/Administration/Default.aspx">第一個通用規則中的 deny="*" 是否具有先例?我試著改變
<deny users="*"/>到
<deny users="?"/>但這最終使 AdditionalUser 可以訪問所有內容。建議?
編輯:我嘗試將特定位置的允許放在通用拒絕規則之前,以防順序很重要。同樣的問題。
更新:我顯然在這裡遺漏了一些東西:我刪除了拒絕 * 配置,只留下了特定於位置的部分。然後,我沒有允許某些角色,而是將其設置為全部拒絕 (*)。但是,當我登錄時,它根本沒有拒絕我。我什至將規則簡化為不是特定於文件的,而是適用於整個目錄,它並沒有拒絕我任何事情。但是,原始的非位置特定規則確實有效,所以我知道這個配置文件正在被讀取。
<?xml version="1.0" encoding="utf-8"?> <configuration> <location path="Forms/Administration"> <system.web> <authorization> <deny users="*" /> </authorization> </system.web> </location> </configuration>
兩件事情:
- 該位置相對於 web.config 文件,因此如果您的 web.config 已經在 /Forms/Administration 中,則應將其更正為:
<location path="Default.aspx"> <system.web> <authorization> <allow roles="Administrator, User, AdditionalUser" /> </authorization> </system.web> </location>
- 為了澄清 Allow 和 Deny 的順序,授權將根據它找到的第一個匹配項來應用,因此順序非常重要。例如:
<deny users="*" /> <allow users="Administrator" />管理員將被拒絕,因為它與拒絕的第一個條目匹配…即使您在下一行指定允許管理員使用者。所以只允許管理員,正確的語法是:
<allow users="Administrator" /> <deny users="*" />總之
如果我正確閱讀了您想要的內容,這可能是您想要的最終產品:
<configuration> <system.web> <authorization> <allow roles="Administrator, User" /> <deny users="*"/> </authorization> </system.web> <location path="Default.aspx"> <system.web> <authorization> <allow roles="AdditionalUser" /> </authorization> </system.web> </location> </configuration>