2010-10-15 61 views
10

我有問題,允許特定角色訪問子目錄中的特定頁面。ASP.NET Forms Auth允許訪問子目錄中的特定文件,當所有其他應該被拒絕

我的ASP.NET應用程序有一個〜/ Forms/Administration目錄,其訪問權限有限。有一個特定的文件,〜/ Forms/Administration/Default.aspx,我想給予1個額外的用戶角色訪問權限,以及Admin角色。

在〜/表格/管理,我有一個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> 

管理員用戶工作得很好,但AdditionalUser總是失敗。我已經嘗試了很多事情 - 上市地點爲

<location path="Forms/Administration/Default.aspx"> 

而作爲

<location path="~/Forms/Administration/Default.aspx"> 

的是從第一個通用的規則採取先例拒絕=「*」?我試圖改變

<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> 

回答

18

兩件事情:

  1. 的位置相對於web.config文件,所以如果你的web.config已經在/表格/管理應該修正爲:

    <location path="Default.aspx"> 
        <system.web> 
         <authorization> 
          <allow roles="Administrator, User, AdditionalUser" /> 
         </authorization> 
        </system.web> 
    </location> 
    
  2. 要澄清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> 
+0

Gah,這很有道理。我會盡快嘗試這個解決方案。 – Matt 2010-10-15 15:16:22

+0

克里斯,你能幫助我http://stackoverflow.com/questions/15882511/how-do-i-configure-asp-net-forms-authentication-to-deny-only-a-specific-url。由於我只需要1次使用就可以訪問,我只需輸入他的登錄信息 – 2013-04-08 18:17:00

+0

Lol @NatePet,我對你的問題發表了評論。希望這有助於 – 2013-04-08 23:00:57

相關問題