2012-12-04 75 views
1

在Sitecore中,我有使用編輯功能區的用戶向頁面添加內容。不過,我想要從該用戶的角色完全禁止EditMode。這是基於一個分支模板,所以我不能只撤銷每個頁面的權限。我需要一些方法來將Sitecore.Context.PageMode設置爲Normal。在Sitecore中,如何更改或設置PageMode

是否有設置PageMode的API?

回答

1

雖然我無法找到一個C#API,我也發現,我可以只使用一個URL重定向,看起來是這樣的:

 if (!Sitecore.Context.PageMode.IsNormal && !IsAdministrator()) 
     { 
      String id = Sitecore.Context.Item.ID.ToString(); 
      Response.Redirect("/?sc_mode=normal&sc_itemid=" + id + "&sc_lang=en"); 
     } 

這將PageMode設置爲正常,如果它在其他任何州。

1

您的重定向方法應該可以工作,但它也會關閉編輯器在重定向後訪問的其他頁面的PageEditor模式。

您還可以檢查頁面是否處於EditMode中,並且用戶是某個角色的一部分,並且該(子)佈局顯示標準.NET控件而不是Sitecore sc控件。

Like <asp:Literal /> instead of <sc:Text /> 
+0

這是一個很好的點。就我而言,這實際上是理想的,但我可以看到哪些可能是一些問題。 – wilsjd

1

我會建議,而不是重定向用戶/硬編碼到您創建的特定頁面創建規則並使用規則引擎。這將允許您重複使用代碼並通過內容編輯器更輕鬆地打開/關閉。

已經有選擇角色的條件:

/sitecore/system/Settings/Rules/Common/Conditions/Security/User Role 

所以,你只需要創建一個動作切換到普通模式。在您的操作中,您可以撥打以下代碼:

Context.Site.SetDisplayMode(Sitecore.Sites.DisplayMode.Normal, Sitecore.Sites.DisplayModeDuration.ResetAfterRequest); 

將其包裹在像wilsjd所提示的檢查中。

的規則引擎的一些信息,如果你不熟悉它:
Decoupling through the Rules Engine
All About the Sitecore ASP.NET CMS Rules Engine

+0

我很喜歡SetDisplayMode,但規則引擎在這個項目上不適合我。 – wilsjd

相關問題