diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Navigation/SettingManagementMainMenuContributor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Navigation/SettingManagementMainMenuContributor.cs index 79ed300398..9e7427a221 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Navigation/SettingManagementMainMenuContributor.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Navigation/SettingManagementMainMenuContributor.cs @@ -1,4 +1,5 @@ -using Microsoft.Extensions.DependencyInjection; +using System; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Options; using System.Linq; @@ -11,17 +12,22 @@ namespace Volo.Abp.SettingManagement.Web.Navigation { public class SettingManagementMainMenuContributor : IMenuContributor { - public Task ConfigureMenuAsync(MenuConfigurationContext context) + public async Task ConfigureMenuAsync(MenuConfigurationContext context) { if (context.Menu.Name != StandardMenus.Main) { - return Task.CompletedTask; + return; } + var settingManagementPageOptions = context.ServiceProvider.GetRequiredService>().Value; - if (!settingManagementPageOptions.Contributors.Any()) + var settingPageCreationContext = new SettingPageCreationContext(context.ServiceProvider); + if ( + !settingManagementPageOptions.Contributors.Any() + || !(await CheckAnyOfPagePermissionsGranted(settingManagementPageOptions, settingPageCreationContext)) + ) { - return Task.CompletedTask; + return; } var l = context.ServiceProvider.GetRequiredService>(); @@ -36,8 +42,21 @@ namespace Volo.Abp.SettingManagement.Web.Navigation icon: "fa fa-cog" ) ); + + } - return Task.CompletedTask; + private async Task CheckAnyOfPagePermissionsGranted( + SettingManagementPageOptions settingManagementPageOptions, + SettingPageCreationContext settingPageCreationContext) + { + foreach (var contributor in settingManagementPageOptions.Contributors) + { + if (await contributor.CheckPermissionsAsync(settingPageCreationContext)) + { + return true; + } + } + return false; } } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/ISettingPageContributor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/ISettingPageContributor.cs index e641ee2ade..f6260cc816 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/ISettingPageContributor.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/ISettingPageContributor.cs @@ -5,5 +5,7 @@ namespace Volo.Abp.SettingManagement.Web.Pages.SettingManagement public interface ISettingPageContributor { Task ConfigureAsync(SettingPageCreationContext context); + + Task CheckPermissionsAsync(SettingPageCreationContext context); } } \ No newline at end of file