2012-03-13 1 views
2

sitecoreのHomeアイテムの2つのフィールドのセキュリティ設定に関する質問があります。sitecoreのHomeアイテムのフィールドレベルのセキュリティを設定する

私はテンプレートを持っています。TaggingTemplateを7つのフィールドで呼びましょう。それらをfield1、field2、field3 ... field7と呼ぶことにしましょう。 このテンプレートは、サイト内の他のすべてのテンプレートで使用されています。

「ホーム」テンプレートを使用するホームアイテムも「タグ付けテンプレート」を継承します。

私がしたいのは、ホーム項目の管理者以外のすべてのユーザーに対してフィールド1からフィールド5を読み取り専用に設定することです。どうやってやるの? ホームアイテムにセキュリティ設定が多数設定されており、ホームアイテムのセキュリティ設定が変更された場合、ウェブサイト全体に影響を与える可能性があります。

field1-field5がTaggingTemplateから継承されているため、ホームテンプレートにそのセキュリティ設定を設定できませんでした。 セキュリティエディタでもそれを行う方法が見つかりませんでした。

+1

ご意見ありがとうございます。彼らは本当に役に立ちます。私は、テンプレートのコピーを作成し、コードやすべてを書くのではなく、Homeアイテムで継承することにしました。 – aspnetdeveloper

答えて

4

継承されたフィールドは、セキュリティエディタのテンプレートを介して表示することはできません。したがって、セキュリティエディタを使用して、TaggingTemplateの特定のフィールドへのアクセスをそのテンプレートのすべてのインスタンスに対して制限できますが、TaggingTemplateがテンプレートHomeによって継承されている場合にのみアクセスを制限することはできません。

4

Markが答えたところでは、Sitecoreのセキュリティでこれを行う方法はありません。 SaveUIパイプラインプラグインでは、ユーザーフレンドリーな方法ではないにしても、それを防ぐことができます。

ILSpyなどのツールを使用して、Sitecore.Pipelines.Saveのパイプラインプロセッサを調べます。 Process(SaveArgs args)メソッドを持つプロセッサを作成します。 Sitecore.Context.User.IsAdministratorの場合、早期返品を行うことができます。それ以外の場合は、コレクションargs.Itemsおよび各SaveArgs.SaveItem内のフィールドを調べて、それがホームアイテムかどうか、および問題のフィールドの1つが編集されているかどうかを調べます。その場合は、ユーザーを保存し、警告停止するには、次のロジックを使用します。

protected void AbortSave(SaveArgs args) 
    { 
     if (args.HasSheerUI) 
     { 
      SheerResponse.Alert("You cannot edit these fields."); 
      SheerResponse.SetReturnValue("failed"); 
     } 
     args.AbortPipeline(); 
    } 

あなたの代わりには、ユーザーが編集することはできません別の項目にこれらのフィールドを移動するには、テンプレートをリファクタリングすることです。