我正在尝试在我的Sitecore实例中设置一些限制,以便只有在网站子部分中创建项目的权限的用户也具有发布权限,但只能发布他们创建内容的项目权限。
例如,我的内容类似于以下内容:
Sitecore
|- Content
|- Home
| - WhatWeDo
| - Infrastructure
| - Training
| - Locations
| - Europe
| - North America
我已将Everyone角色设置为对内容树中的所有项目具有读取权限,并且我已明确指定拒绝写入,重命名,创建和删除权限
我已经设置了一个角色,“WhatWeDo”并且已被授予对WhatWeDo及其后代项目的写入,重命名,创建和删除权限。
现在,如果我将“WhatWeDo”角色添加到客户端发布角色,那么被授予“WhatWeDo”角色的用户也可以发布,但他们可以在内容树中发布任何项目。即显示“发布”功能区上的“发布”按钮。
大多数情况下,当我尝试使用谷歌搜索时,他们正在谈论发布限制。即发布设置对话框,但在这种情况下,这对我没用。
我找到了这个https://stackoverflow.com/a/6351649/1442308,但我似乎无法使其工作,我怀疑它与Sitecore的旧版本有关,不再适用。
我还更新了我的配置,以便只有具有读写权限才能发布发布
<setting name="Publishing.CheckSecurity" >
<patch:attribute name="value" value="true" />
</setting>
但这对限制发布内容树项目的用户没有影响,因为用户仍然可以在内容树的“位置”部分中发布项目。即发布按钮仍然可以在“发布”功能区上看到。
我需要对此进行限制,以便那些被授予“WhatWeDo”角色的用户只能发布项目WhatWeDo及其后代,并且无法在内容树中发布任何其他项目。即,当它们位于WhatWeDo项目或其任何后代时,它们应该只有发布按钮可见。
更新
更新了一些问题,以便更清楚地确保我希望确保发布按钮在功能区栏上不可见。
答案 0 :(得分:5)
在执行发布期间使用Publishing.CheckSecurity设置,因此只有用户有权访问的项才会实际发布。它不会影响对发布功能区按钮的访问。
通常,人们使用工作流来实现您的目标。使用发布操作设置工作流程。初始安装提供的示例工作流程提供了一个示例。然后,您可以限制对工作流命令的访问。
<强>更新强>
开箱即用的示例工作流程具有使其工作所需的一切。它具有命令和自动发布操作以及应用于Sitecore客户端创作角色的安全设置。
由于您已经对内容项应用了安全性,因此您需要做的就是将这些项分配给示例工作流。您可以复制它并根据需要重命名。您还可以将“批准”命令重命名为“发布”。
要确保功能区中不显示标准发布按钮,请确保这些用户不是Sitecore客户端发布角色的成员。
答案 1 :(得分:0)
(抱歉,我还没有启用评论选项。)
我肯定会选择工作流程选项。正如评论中提到的,“发布”按钮将通过安全权限启用,但作为一般功能,不依赖于项目权限。如果您不希望显示“发布”按钮而不进行精美的自定义,则应该忘记此选项。
用户可以使用工作流程按钮触发“审核”选项卡下的发布操作,而不是传统的“发布”按钮。对于最终用户来说,这不会有太大变化。它甚至会让他们习惯于工作流操作,您可以在项目的后期进一步使用和优化。您可以借此机会在项目中介绍它们,而且它完全符合您的需求。
不要犹豫,询问您是否需要有关如何设置此类工作流程的更详细说明。
答案 2 :(得分:0)
对于用户无法访问的项目,无法隐藏功能区中的发布按钮,但使用规则引擎来控制是显示按钮还是非常简单不。它需要一些编码,但没有办法解决这个问题。
您可以在这些博文中找到更多信息,但由于规则引擎中的更改,Sitecore 7.1+存在一些差异:
<强> 1。创建规则操作类
在Visual Studio项目中,按照第一篇博文中的说明创建CommandRuleContext
和SetCommandState
类。
<强> 2。在Sitecore中创建规则
这是Sitecore 7.1+中有很多更新的地方,第三篇博文解释了规则引擎的新结构:
在/sitecore/system/Settings/Rules/Definitions/Tags
下创建一个名为Command State
的新标记
在/sitecore/system/Settings/Rules/Definitions
下创建一个名为Command States
的新文件夹,并添加步骤1.14中显示的4个州
在名为/sitecore/system/Settings/Rules/Definitions/Elements
的{{1}}下创建一个新的元素文件夹
在此文件夹下插入新的Command Rules
。将字段值设置为:
文字: Action
输入: set command state to [commandstateid,Tree,root=/sitecore/system/Settings/Rules/Definitions/Command States,specific command state]
选择MyProject.Custom.Commands.SetCommandState, MyProject.Custom
项,然后从标签列表中选择Tags/Default
。这是我们之前定义的标签。
现在在Command State
下插入一个新的&#34;规则上下文文件夹&#34;调用/sitecore/system/Settings/Rules
,然后在Rules文件夹中添加新规则。
在创建规则之前,我们需要关联标记以显示条件和操作。选择&#34;标签/默认&#34;再次提交项目,此时选择Command Rules
和Command State
。如果要使用不同的条件(例如,项目层次结构,项目信息,安全性等),您可以选择不同的标签
现在使用您需要的条件创建规则,例如
第3。更新命令以使用规则
我们需要更新Publish按钮命令的代码以使用我们定义的规则。
创建一个继承自现有Publish命令的新命令类:
Item Security
现在我们可以修改此命令而不是默认命令:
using Sitecore.Data.Items;
using Sitecore.Diagnostics;
using Sitecore.Rules;
using Sitecore.SecurityModel;
using Sitecore.Shell.Framework.Commands;
namespace MyProject.Custom.Commands
{
public class PermissionBasedPublish : Sitecore.Shell.Framework.Commands.PublishNow
{
public override CommandState QueryState(CommandContext context)
{
Assert.ArgumentNotNull(context, "context");
var state = base.QueryState(context);
if (state != CommandState.Enabled)
return state;
return RunRules(context);
}
private CommandState RunRules(CommandContext context)
{
Item parentRuleItem;
var ruleContext = new CommandRuleContext();
ruleContext.Item = context.Items[0];
using (new SecurityDisabler())
{
parentRuleItem = ruleContext.Item.Database.GetItem("/sitecore/system/Settings/Rules/Command Rules/Rules");
if (parentRuleItem == null)
return CommandState.Enabled;
}
RuleList<CommandRuleContext> rules = RuleFactory.GetRules<CommandRuleContext>(parentRuleItem, "Rule");
if (rules == null)
return CommandState.Enabled;
rules.Run(ruleContext);
return ruleContext.CommandState;
}
}
}
发布按钮的可见性现在基于已定义的规则。使用上面定义的规则,只有当用户具有对当前项目的写访问权时,该按钮才可见。
用户仍需要使用相应角色的发布权限。请注意,使用开箱即用角色意味着用户也可以从下拉列表中访问“发布站点”选项。您需要根据需要限制对Core数据库中的<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/" xmlns:set="http://www.sitecore.net/xmlconfig/set/">
<sitecore>
<commands>
<command name="item:publishnow">
<patch:attribute name="type">MyProject.Custom.Commands.PermissionBasedPublish, MyProject.Custom</patch:attribute>
</command>
</commands>
</sitecore>
</configuration>
和桌面上的快捷方式的访问。
您可能还希望将其与/sitecore/content/Applications/Content Editor/Menues/Publish/Publish Site
设置相结合,方法是将其设置为 true 。
我要补充说,将用户发布权限作为一般规则是一个坏主意IMO,因为每次发布,即使是单个项目(这包括自动发布工作流程)也会清除HTML缓存并可能导致性能问题。