2010-02-01 114 views
1

所以,我有我只希望匿名用戶看到一個頁面,並通過驗證的用戶重定向。所以,像這樣:「反向」授權頁面重定向到登錄

<location path="Login_ForgotUserID.aspx"> 
    <system.web> 
     <authorization> 
      <allow users="?" /> 
      <deny users="*" /> 
     </authorization> 
    </system.web> 
</location> 

的問題是,當某個用戶試圖訪問它,它會將其重定向到登錄頁面。我怎樣才能讓他們更合乎邏輯? obtw,我僅限於.NET v2.0x

+0

好了,通過在web.config這樣做的意義就在於把地圖控件的優勢。因此,例如,如果匿名用戶在此頁面上並單擊登錄(LoginStatus控件),它會嘗試將其返回到頁面。但是,當系統獲取請求時,用戶無權查看資源,並且由此產生的操作是將它們發送到登錄頁面。我需要的是一種測試我重定向到的資源的方法,以查看用戶是否可以訪問它,如果不是以不同的方式處理它。 – 2010-02-01 19:00:18

+0

好吧,以下是我的理解: - SiteMap有一個用戶可以訪問的鏈接列表。該列表將被web.config中設置的權限修剪。 - 通常的流程是從匿名到認證。在web.config中,這是通過「拒絕?」實現的。然後「允許*」阻止未經身份驗證的用戶。 - 當用戶嘗試轉到他們無權訪問的頁面時,該網站將其重定向到登錄頁面。 所以,問題是,ASP假定「如果你沒有權限,你必須去登錄頁面」。在所有情況下並非總是如此。我需要解決這個問題。 – 2010-02-03 12:47:46

+0

即使在這種情況下,安全修剪也會隱藏菜單中的鏈接,所以這只是直接訪問URL,對嗎? – Greg 2010-02-03 14:46:54

回答

0

不知道如何在web.config中做到這一點。在Login_ForgotUserID.aspx頁面中,可能會檢查用戶在加載/呈現前是否已通過身份驗證。如果用戶通過身份驗證,則將其重定向到一些無害的主頁或默認頁面。

2

爲什麼不只是添加if (Request.IsAuthenticated) { Response.Redirect ...到頁面的Page_Load事件中,你不必擔心配置出來?不幸的是,你只能配置一個頁面來處理登錄,如果有人沒有訪問權限,他們將被引導到它。你也可以在Login上檢查ReturnURL,看看它是否來自一個頁面,並且用戶是Authenticated的,但對我來說這是一個hokey解決方案。

+0

這完全正確。在web.config中沒有辦法做到這一點,你需要編寫代碼來處理它。您**可以**通過客戶配置部分或配置文件的應用程序鍵部分來部分控制它。 – Greg 2010-02-03 14:42:18

1

好,所以答案是,我需要它呈現之前修改菜單。我從來沒有找到通過更改授權/ SecurityTrimming來處理SiteMap的方法。所以我決定嘗試修改源代碼中的SiteMap,並且發現如何修改MenuItems as they were bound。這似乎是最有效的過程。

0

你也可以在這裏看看使用角色。

如果您是默認添加所有用戶,說「認證」角色,那麼你可以有:

<location path="Login.aspx"> 
    <system.web> 
    <authorization> 
     <deny roles="authenticated" /> 
     <allow users="*" /> 
    </authorization> 
    </system.web> 
</location> 

你必須確保否認是最前一頁列表,因爲這些被處理的順序,並使用第一個匹配。其他

兩種方法做類似的事情:

  1. custom sitemap provider以確保當用戶通過驗證這些網頁不會被返回給樹視圖控件。
  2. control adapter你的TreeView控件,以確保這些網頁不會被它渲染。