4

在我们的 Sitecore 实施中,我们有分支编辑,他们需要对英语及其母语(例如德语)的语言写入权限。但是,我们的内容树的某些部分不应由这些分支编辑器编辑英文版本,但母语版本应该。

举一个具体的例子,如果我们有一个产品页面,上面有一些全局信息(例如零件号)和一些可本地化的信息(例如描述字段),我们正在使用字段级安全性来锁定全局(部件号)字段,但需要一种方法来确保德语编辑器可以创建项目的德语版本并放入其翻译的可本地化(描述)文本,但不会无意中切换到和更新英文版本那个描述。

我了解在系统 > 语言中为某些角色设置语言读/写。我们已经涵盖了那部分。我想知道的是,对于具有英语和德语版本的写入权限的假设内容编辑器,是否有一种方法可以有效地完成以下类型的场景:

    • 第 1 项(编辑拥有英文和德文版本的写入权限)
    • ...子项目 1
    • ...子项目 2
    • 第 2 项(编辑只有德语版本的写权限)
    • ...子项目 1
    • ...子项目 2

在此先感谢您的任何建议。

4

1 回答 1

5

据我所知,Sitecore 原生的安全模型在这方面存在不足。语言读/写访问不能本地化到内容树的给定部分。也就是说,如果您可以编辑一种语言,那么您可以对您具有写入权限的所有内容项执行此操作。

但是,我认为您可以结合使用 saveUi 管道和 getContentEditorWarnings 管道来满足您的要求。

保存UI

在此管道中,您需要一个处理器来检查用户是否应该能够以当前语言编辑给定内容。我将把它留给您如何配置/确定(XML 配置?用户访问内容树分支中特定于语言的项目?),但如果应该拒绝用户访问,您可以阻止节省。

public class CheckLanguageWritePermission
    {
        public string WorkflowStateID { get; set; }

        public void Process(SaveArgs args)
        {
            Assert.ArgumentNotNull(args, "args");
            Assert.IsNotNull(args.Items, "args.Items");
            foreach (SaveArgs.SaveItem item in args.Items)
            {
                Item item2 = Sitecore.Client.ContentDatabase.Items[item.ID, item.Language];
                    if (/* user should not have permission*/)
                    {
                        AbortSave(args);
                        return;
                    }
            }
        }

        protected void AbortSave(SaveArgs args)
        {
            if (args.HasSheerUI)
            {
                SheerResponse.Alert("You do not have permission to edit this item in the current language.");
                SheerResponse.SetReturnValue("failed");
            }
            args.AbortPipeline();
        }
    }

获取内容编辑器警告

由于您无法阻止用户使用这种方法实际编辑内容(只是保存它),因此您可能应该提供一个警告,说明这一点。

public class CheckLanguageWritePermission
{
    // Methods
    public void Process(GetContentEditorWarningsArgs args)
    {
        Item item = args.Item;
        if (/* user should not have permission*/)
        {
            GetContentEditorWarningsArgs.ContentEditorWarning warning = args.Add();
            warning.Title = "You do not have permission to edit this item in the current language.";
            warning.IsExclusive = true;
        }
    }
}

这不是一个完美的解决方案,但它确实可以防止对内容进行不必要的编辑。如果版本控制/工作流程在起作用,您可以通过覆盖 item:addversion 和 item:checkout 的 UI 命令来完全阻止添加新版本。

确定访问权限可能很棘手,最好的方法取决于您的特定业务规则。

于 2012-12-04T00:50:06.583 回答