4

Sitecoreの実装では、英語とその母国語(ドイツ語など)の両方への言語書き込みアクセスが必要なブランチエディターがあります。ただし、コンテンツツリーの特定の部分では、英語バージョンをこれらのブランチエディターで編集することはできませんが、母国語バージョンを編集する必要があります。

具体的な例を挙げると、グローバル情報(部品番号など)とローカライズ可能な情報(説明フィールドなど)が含まれる製品ページがある場合、フィールドレベルのセキュリティを使用してロックダウンします。グローバル(部品番号)フィールド。ただし、たとえばドイツ語の編集者がアイテムのドイツ語バージョンを作成して、翻訳されたローカライズ可能な(説明)テキストを入力できるようにする方法が必要ですが、誤って英語バージョンに切り替えて更新することはできません。その説明の。

システムでの言語の読み取り/書き込みの設定>特定の役割の言語について理解しています。その部分をカバーしました。私が疑問に思っているのは、英語とドイツ語のバージョンへの書き込みアクセス権を持つ架空のコンテンツ編集者のために、次のタイプのシナリオを効果的に達成する方法があるかどうかです。

    • アイテム1 (編集者は英語版とドイツ語版の両方に書き込みアクセスできます)
    • ...サブアイテム1
    • ...サブアイテム2
    • アイテム2 (編集者はドイツ語版にのみ書き込みアクセスできます)
    • ...サブアイテム1
    • ...サブアイテム2

提案を事前に感謝します。

4

1 に答える 1

5

私の知る限り、ネイティブのSitecoreセキュリティモデルはこの点で不十分です。言語の読み取り/書き込みアクセスは、コンテンツツリーの特定の部分にローカライズすることはできません。つまり、言語を編集できる場合は、書き込みアクセス権を持つすべてのコンテンツアイテムで編集できます。

ただし、saveUiパイプラインとgetContentEditorWarningsパイプラインの組み合わせを使用して要件を達成できると思います。

saveUi

このパイプラインでは、ユーザーが現在の言語で特定のコンテンツを編集できるかどうかをチェックするプロセッサが必要になります。これがどのように構成/決定されるか(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();
        }
    }

getContentEditorWarnings

このアプローチでは、ユーザーが実際にコンテンツを編集するのを防ぐことはできないので(単に保存するだけです)、おそらく同じくらい多くのことを言う警告を提供する必要があります。

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 に答える