在 Sitecore 中,我有一些用户正在使用编辑功能区向页面添加内容。但是,有些页面我想完全阻止该用户角色的 EditMode。这是基于分支模板的,所以我不能只撤销每个页面的权限。我需要一些方法将 Sitecore.Context.PageMode 设置为 Normal。
是否有用于设置 PageMode 的 API?
在 Sitecore 中,我有一些用户正在使用编辑功能区向页面添加内容。但是,有些页面我想完全阻止该用户角色的 EditMode。这是基于分支模板的,所以我不能只撤销每个页面的权限。我需要一些方法将 Sitecore.Context.PageMode 设置为 Normal。
是否有用于设置 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 设置为 Normal。
您的重定向方法应该可以工作,但它也会关闭编辑器在重定向后访问的其他页面的 PageEditor 模式。
您还可以检查页面是否处于 EditMode 并且用户是某个角色的一部分,并且该(子)布局显示标准 .NET 控件而不是 Sitecore sc-controls。
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 建议的那样将其包裹在支票中。
关于规则引擎的一些信息,如果你不熟悉的话:
通过规则引擎解耦
关于 Sitecore ASP.NET CMS 规则引擎