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 @@