【发布时间】:2012-12-04 22:09:21
【问题描述】:
在 Sitecore 中,我有一些用户正在使用编辑功能区向页面添加内容。但是,有些页面我想完全阻止该用户角色的 EditMode。这是基于分支模板的,所以我不能只撤销每个页面的权限。我需要一些方法将 Sitecore.Context.PageMode 设置为 Normal。
有设置PageMode的API吗?
【问题讨论】:
标签: asp.net sitecore page-editor
在 Sitecore 中,我有一些用户正在使用编辑功能区向页面添加内容。但是,有些页面我想完全阻止该用户角色的 EditMode。这是基于分支模板的,所以我不能只撤销每个页面的权限。我需要一些方法将 Sitecore.Context.PageMode 设置为 Normal。
有设置PageMode的API吗?
【问题讨论】:
标签: asp.net sitecore page-editor
虽然我找不到 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 的建议将其包裹在支票中。
如果您不熟悉规则引擎,请提供一些信息:
Decoupling through the Rules Engine
All About the Sitecore ASP.NET CMS Rules Engine
【讨论】: