using System.Collections.Generic; using System.Threading.Tasks; using zero.Core; using zero.Core.Api; using zero.Core.Entities; using zero.Core.Extensions; using zero.Core.Identity; namespace zero.Web.Controllers { [ZeroAuthorize(Permissions.Sections.Settings, PermissionsValue.Read)] public class SettingsController : BackofficeController { IAuthenticationApi AuthApi; IApplicationsApi ApplicationsApi; public SettingsController(IAuthenticationApi authApi, IApplicationsApi applicationsApi) { AuthApi = authApi; ApplicationsApi = applicationsApi; } /// /// Get all settings areas /// public async Task GetAreas() { bool isSuperUser = AuthApi.IsSuper(); IList permissions = AuthApi.GetPermissions(Permissions.Settings.PREFIX); List groups = new List(); foreach (SettingsGroup group in Options.Settings.GetAllItems()) { List areas = new List(); foreach (SettingsArea area in group.Items) { if (!isSuperUser && !Permission.CanReadKey(permissions, area.Alias, true)) { continue; } ZeroVueSettingsArea vueArea = new ZeroVueSettingsArea() { Alias = area.Alias, Name = area.Name, Description = area.Description, Icon = area.Icon, Url = Constants.Sections.Settings.EnsureStartsWith('/') + Safenames.Alias(area.Alias).EnsureStartsWith('/') }; areas.Add(vueArea); } if (areas.Count > 0) { groups.Add(new ZeroVueSettingsGroup() { Name = group.Name, Items = areas }); } } IList applications = new List(); if (Permission.CanReadKey(permissions, Permissions.Settings.Applications, false)) { applications = await ApplicationsApi.GetAll(); } return new { groups, applications }; } } }