2011-07-13 65 views
2

在我的Sitecore站點中,我只需要一個可供授權用戶查看的頁面。我允許讀取和繼承我想要的角色,並拒​​絕讀取和繼承extranet \ anonymous。該項目是其他項目未受保護的組的一部分。這個項目清單是數據綁定並呈現爲網站上的導航鏈接。如何獲取受保護頁面的鏈接並將用戶重定向到登錄頁面?

var id = new Sitecore.Data.ID("<guid here>"); 
var item = Sitecore.Context.Database.GetItem(id); 

// protected item is not part of Children collection when user is anon. 
this.navrepeater.DataSource = item.Children; 
this.navrepeater.DataBind(); 

當我登錄時,會顯示指向受保護項目的鏈接,我可以查看該頁面。當我沒有登錄(作爲extranet \ anonymous操作)時,鏈接完全不顯示。當我直接訪問網址時,出現403錯誤。在我的web.config中,我已經在site節點上設置了loginPage屬性,但我沒有被重定向。

<site name="mysite" ... loginpage="/login.aspx" /> 

所以,

  1. 如何顯示鏈接到受保護的頁爲匿名用戶

  2. 如何獲得Sitecore的將用戶重定向到登錄頁面需要

+0

只是爲了大家的信息,'loginpage'區分大小寫,應該是'loginPage'。 – lincolnk

回答

3

1)您可以將檢索導航鏈接的項目的代碼包裝在SecurityDisabler,顯示的鏈接,即使他們無法查看頁面:如果你讓你的頁面的代碼類繼承Sitecore.Shell.Web.UI.SecurePage它會處理的檢查,並重定向到登錄頁面,在你身後

using(new SecurityDisabler()) { // this bypasses any security 
    this.navrepeater.DataSource = item.GetChildren(); // note that the Children property is deprecated, use the GetChildren() method instead 
} 

2)。不需要編碼。

+0

謝謝,'SecurityDisabler'是它。 「SecurePage」給了我一個很難的時間,但是我意識到loginpage是區分大小寫的,並且在沒有'SecurePage'的情況下我的登錄重定向工作。 – lincolnk

+0

Oooooh ...我可以從Sitecore.Shell.Web.UI.SecurePage繼承任何ASPX頁面嗎?我在我的Sitecore樹之外有幾個實用程序頁面(文件系統.aspx文件),我通過IIS而不是Sitecore進行保護。 – Bryan

相關問題