在Sitecore中,我有使用編輯功能區的用戶向頁面添加內容。不過,我想要從該用戶的角色完全禁止EditMode。這是基於一個分支模板,所以我不能只撤銷每個頁面的權限。我需要一些方法來將Sitecore.Context.PageMode設置爲Normal。在Sitecore中,如何更改或設置PageMode
是否有設置PageMode的API?
在Sitecore中,我有使用編輯功能區的用戶向頁面添加內容。不過,我想要從該用戶的角色完全禁止EditMode。這是基於一個分支模板,所以我不能只撤銷每個頁面的權限。我需要一些方法來將Sitecore.Context.PageMode設置爲Normal。在Sitecore中,如何更改或設置PageMode
是否有設置PageMode的API?
雖然我無法找到一個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設置爲正常,如果它在其他任何州。
您的重定向方法應該可以工作,但它也會關閉編輯器在重定向後訪問的其他頁面的PageEditor模式。
您還可以檢查頁面是否處於EditMode中,並且用戶是某個角色的一部分,並且該(子)佈局顯示標準.NET控件而不是Sitecore sc控件。
Like <asp:Literal /> instead of <sc:Text />
我會建議,而不是重定向用戶/硬編碼到您創建的特定頁面創建規則並使用規則引擎。這將允許您重複使用代碼並通過內容編輯器更輕鬆地打開/關閉。
已經有選擇角色的條件:
/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
我很喜歡SetDisplayMode,但規則引擎在這個項目上不適合我。 – wilsjd
這是一個很好的點。就我而言,這實際上是理想的,但我可以看到哪些可能是一些問題。 – wilsjd