1

在 Sitecore 中,我有一些用户正在使用编辑功能区向页面添加内容。但是,有些页面我想完全阻止该用户角色的 EditMode。这是基于分支模板的,所以我不能只撤销每个页面的权限。我需要一些方法将 Sitecore.Context.PageMode 设置为 Normal。

是否有用于设置 PageMode 的 API?

4

3 回答 3

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 设置为 Normal。

于 2012-12-04T22:12:03.757 回答
1

您的重定向方法应该可以工作,但它也会关闭编辑器在重定向后访问的其他页面的 PageEditor 模式。

您还可以检查页面是否处于 EditMode 并且用户是某个角色的一部分,并且该(子)布局显示标准 .NET 控件而不是 Sitecore sc-controls。

Like <asp:Literal /> instead of <sc:Text />
于 2012-12-05T12:16:22.057 回答
1

我建议不要将用户/硬编码重定向到您创建的特定页面并使用规则引擎。这将允许您重用代码并通过内容编辑器更轻松地打开/关闭。

已经有选择角色的条件:

/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 规则引擎

于 2012-12-07T03:43:37.200 回答