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 = area.CustomUrl.Or(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
};
}
}
}