diff --git a/zero.Core/Api/PermissionsApi.cs b/zero.Core/Api/PermissionsApi.cs index 3e589e9c..5a3b9497 100644 --- a/zero.Core/Api/PermissionsApi.cs +++ b/zero.Core/Api/PermissionsApi.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using System.Collections.Generic; +using zero.Core.Entities; using zero.Core.Identity; namespace zero.Core.Api @@ -16,15 +17,68 @@ namespace zero.Core.Api /// - //public IList GetPermissions() - //{ + public IList GetAll() + { + IList result = new List(); - //} + PermissionCollection permissionSections = new PermissionCollection() + { + Label = "@permission.collections.sections", + Description = "@permission.collections.sections_description" + }; + + permissionSections.Items.Add(new Permission(Permissions.Sections.Dashboard, "@sections.item.dashboard", null, PermissionValueType.Boolean)); + permissionSections.Items.Add(new Permission(Permissions.Sections.Pages, "@sections.item.pages", null, PermissionValueType.Boolean)); + permissionSections.Items.Add(new Permission(Permissions.Sections.Spaces, "@sections.item.spaces", null, PermissionValueType.Boolean)); + permissionSections.Items.Add(new Permission(Permissions.Sections.Media, "@sections.item.media", null, PermissionValueType.Boolean)); + permissionSections.Items.Add(new Permission(Permissions.Sections.Settings, "@sections.item.settings", null, PermissionValueType.Boolean)); + + result.Add(permissionSections); + + if (Options.Spaces.Count > 0) + { + PermissionCollection permissionSpaces = new PermissionCollection() + { + Label = "@permission.collections.spaces", + Description = "@permission.collections.spaces_description" + }; + + foreach (Space space in Options.Spaces) + { + permissionSpaces.Items.Add(new Permission(Permissions.Spaces.PREFIX + space.Alias, space.Name, null, PermissionValueType.ReadWrite)); + } + + result.Add(permissionSpaces); + } + + PermissionCollection permissionSettings = new PermissionCollection() + { + Label = "@permission.collections.settings", + Description = "@permission.collections.settings_description" + }; + + permissionSettings.Items.Add(new Permission(Permissions.Settings.Updates, "@settings.system.updates.name", "@settings.system.updates.text_default", PermissionValueType.ReadWrite)); + permissionSettings.Items.Add(new Permission(Permissions.Settings.Applications, "@settings.system.applications.name", "@settings.system.applications.text", PermissionValueType.ReadWrite)); + permissionSettings.Items.Add(new Permission(Permissions.Settings.Users, "@settings.system.users.name", "@settings.system.users.text", PermissionValueType.ReadWrite)); + permissionSettings.Items.Add(new Permission(Permissions.Settings.Languages, "@settings.system.languages.name", "@settings.system.languages.text", PermissionValueType.ReadWrite)); + permissionSettings.Items.Add(new Permission(Permissions.Settings.Countries, "@settings.system.countries.name", "@settings.system.countries.text", PermissionValueType.ReadWrite)); + permissionSettings.Items.Add(new Permission(Permissions.Settings.Translations, "@settings.system.translations.name", "@settings.system.translations.text", PermissionValueType.ReadWrite)); + permissionSettings.Items.Add(new Permission(Permissions.Settings.Logging, "@settings.system.logs.name", "@settings.system.logs.text", PermissionValueType.ReadWrite)); + permissionSettings.Items.Add(new Permission(Permissions.Settings.Plugins, "@settings.plugins.installed.name", "@settings.plugins.installed.text_default", PermissionValueType.ReadWrite)); + permissionSettings.Items.Add(new Permission(Permissions.Settings.CreatePlugin, "@settings.plugins.create.name", "@settings.plugins.create.text", PermissionValueType.ReadWrite)); + + result.Add(permissionSettings); + + return result; + } } public interface IPermissionsApi { - + /// + /// Get all available permissions to choose from + /// + IList GetAll(); } } diff --git a/zero.Core/Api/SpacesApi.cs b/zero.Core/Api/SpacesApi.cs index c094bd7f..d59adfc6 100644 --- a/zero.Core/Api/SpacesApi.cs +++ b/zero.Core/Api/SpacesApi.cs @@ -17,12 +17,15 @@ namespace zero.Core.Api { protected IDocumentStore Raven { get; private set; } + protected IPermissionsApi PermissionsApi { get; private set; } + protected ZeroOptions Options { get; private set; } - public SpacesApi(IDocumentStore raven, IOptionsMonitor options) + public SpacesApi(IDocumentStore raven, IPermissionsApi permissionsApi, IOptionsMonitor options) { Raven = raven; + PermissionsApi = permissionsApi; Options = options.CurrentValue; } diff --git a/zero.Core/Api/UserApi.cs b/zero.Core/Api/UserApi.cs index 1f7b08a4..f3b37672 100644 --- a/zero.Core/Api/UserApi.cs +++ b/zero.Core/Api/UserApi.cs @@ -79,6 +79,15 @@ namespace zero.Core.Api } + /// + public Permission GetPermission(string key = null) + { + Claim claim = Principal.Claims.FirstOrDefault(claim => claim.Type == Constants.Auth.Claims.Permission && claim.Value.StartsWith(key + ":")); + + return Permission.FromClaim(claim); + } + + /// public async Task> GetAll(string appId = null) { @@ -138,6 +147,11 @@ namespace zero.Core.Api /// IList GetPermissions(string prefix = null); + /// + /// Get a single permissions by key + /// + public Permission GetPermission(string key = null); + /// /// Get all users for the selected application /// diff --git a/zero.Core/Identity/Permission.cs b/zero.Core/Identity/Permission.cs index 21ef61f5..6d2a75c9 100644 --- a/zero.Core/Identity/Permission.cs +++ b/zero.Core/Identity/Permission.cs @@ -104,6 +104,10 @@ namespace zero.Core.Identity /// public static Permission FromClaim(Claim claim, string prefixToRemove = null) { + if (claim == null) + { + return null; + } return FromClaim(claim.Value, prefixToRemove); } diff --git a/zero.Core/Identity/Permissions.cs b/zero.Core/Identity/Permissions.cs index 81383856..c40ce291 100644 --- a/zero.Core/Identity/Permissions.cs +++ b/zero.Core/Identity/Permissions.cs @@ -33,6 +33,12 @@ public const string Media = PREFIX + Constants.Sections.Media; public const string Settings = PREFIX + Constants.Sections.Settings; } + + + public struct Spaces + { + public const string PREFIX = "space."; + } } diff --git a/zero.Web/App/Components/Tabs/tabs.vue b/zero.Web/App/Components/Tabs/tabs.vue index b12a3d44..5798271e 100644 --- a/zero.Web/App/Components/Tabs/tabs.vue +++ b/zero.Web/App/Components/Tabs/tabs.vue @@ -114,7 +114,7 @@ position: relative; transition: color 0.2s ease; border-radius: var(--radius) var(--radius) 0 0; - background: var(--color-bg); + background: rgba(white, 0.4); .theme-dark & { diff --git a/zero.Web/App/Pages/settings/role.vue b/zero.Web/App/Pages/settings/role.vue index af4ba367..f11d11e9 100644 --- a/zero.Web/App/Pages/settings/role.vue +++ b/zero.Web/App/Pages/settings/role.vue @@ -38,7 +38,7 @@ - + @@ -47,6 +47,7 @@