日本語版
最新ニュース
企業

Bartosz Sekuła | Optimizely CMS のグローバル メニューからメニュー項目 (レポート、ダッシュボード) を非表示にする方法

レポートセクションは、WebEditorsグループのメンバーであるすべてのユーザーがデフォルトで利用できます。これは、そのメニュー項目の承認ポリシーが次のように設定されているためです。 AuthorizationPolicy = CmsPolicyNames.CmsEdit, したがって、基本的にレポート セクションは常に編集モードと一緒に表示されます。ただし、レポートが特定の少数の編集者にのみ役立つ場合があり、他のすべての編集者には非表示にできる場合があると考えられます。 残念ながら、これをどこでも構成することはできませんが、Optimizely の優れた強力な拡張性により、わずか数行のコードでその要件を満たすことができます。 public class CustomMenuAssembler : MenuAssembler { private readonly IPrincipalAccessor _principalAccessor; public CustomMenuAssembler(IEnumerable menuProviders, IHttpContextAccessor httpContextAccessor, IPrincipalAccessor principalAccessor) : base(menuProviders, httpContextAccessor) { _principalAccessor = principalAccessor; } public override IEnumerable GetMenuItems(string parentPath,…

1723314483
2024-08-08 19:47:00

レポートセクションは、WebEditorsグループのメンバーであるすべてのユーザーがデフォルトで利用できます。これは、そのメニュー項目の承認ポリシーが次のように設定されているためです。

AuthorizationPolicy = CmsPolicyNames.CmsEdit,

したがって、基本的にレポート セクションは常に編集モードと一緒に表示されます。ただし、レポートが特定の少数の編集者にのみ役立つ場合があり、他のすべての編集者には非表示にできる場合があると考えられます。

残念ながら、これをどこでも構成することはできませんが、Optimizely の優れた強力な拡張性により、わずか数行のコードでその要件を満たすことができます。

public class CustomMenuAssembler : MenuAssembler
{
	private readonly IPrincipalAccessor _principalAccessor;

	public CustomMenuAssembler(IEnumerable menuProviders, IHttpContextAccessor httpContextAccessor,
		IPrincipalAccessor principalAccessor) : base(menuProviders, httpContextAccessor)
	{
		_principalAccessor = principalAccessor;
	}

	public override IEnumerable GetMenuItems(string parentPath, int relativeDepth)
	{
		var menuItems = base.GetMenuItems(parentPath, relativeDepth).ToList();

		if (_principalAccessor.Principal.IsInRole("HasAccessToReportsGroup") == false)
		{
			return menuItems;
		}

		var reportItem =
			menuItems.SingleOrDefault(x => x.Path.Equals("/global/cms/report", StringComparison.Ordinal));

		if (reportItem == null)
		{
			return menuItems;
		}

		// Add user group check here
		menuItems.Remove(reportItem);

		return menuItems;
	}
}

そこで、デフォルトの MenuAssembler を継承する新しい MenuAssembler を作成し、追加の IPrincipalAccessor 参照をそれに渡します。

私の例では、カスタムユーザーグループを作成しました。 レポートグループへのアクセス権あり 編集者がこのグループに属していない場合は、[レポート]メニュー項目は表示されません。

最後に、このカスタム メニュー アセンブラーを登録する必要があります。組み込みの CMS 初期化モジュールが完了した後にこれを実行する必要があります。カスタム初期化可能モジュールを追加しましょう。

[InitializableModule]
[ModuleDependency(typeof(InitializableModule))]
public class DependencyResolverInitialization : IConfigurableModule
{
	public void ConfigureContainer(ServiceConfigurationContext context)
	{
		context.ConfigurationComplete += (_, _) =>
		{
			context.Services.AddSingleton();
		};
	}

	public void Initialize(InitializationEngine context)
	{

	}

	public void Uninitialize(InitializationEngine context)
	{

	}
}

同じ方法を使用して、他のすべてのメニュー項目を条件付きで非表示にすることもできます。パスを変更するだけです。

他のパスのリストをご覧ください:

  • /グローバル/cms/レポート
  • /グローバル/cms/ダッシュボード
  • /グローバル/cms/訪問者グループ

#Bartosz #Sekuła #Optimizely #CMS #のグローバル #メニューからメニュー項目 #レポートダッシュボード #を非表示にする方法

執筆者について: nipponese

Nipponese News編集部は、国内外のニュースを日本語で分かりやすくお届けします。