From d3b55d155b662476c7ed4d155a3e54170c3d07de Mon Sep 17 00:00:00 2001 From: Marcel Baumgartner Date: Mon, 17 Jul 2023 22:16:39 +0200 Subject: [PATCH] Added permission groups. Cleaned security ui. Added some permission stuff --- Moonlight/App/Perms/PermissionStorage.cs | 15 + Moonlight/App/Perms/Permissions.cs | 24 +- .../App/Services/Sessions/IdentityService.cs | 23 +- .../Navigations/AdminSecurityNavigation.razor | 32 ++ .../Components/Partials/SidebarMenu.razor | 10 +- .../Shared/Views/Admin/Security/Index.razor | 7 + .../Security.razor => Security/IpBans.razor} | 34 +- .../Admin/{Sys => Security}/Malware.razor | 6 +- .../Admin/Security/PermissionGroups.razor | 132 ++++++ Moonlight/Shared/Views/Admin/Users/View.razor | 392 ++++++++---------- 10 files changed, 430 insertions(+), 245 deletions(-) create mode 100644 Moonlight/Shared/Components/Navigations/AdminSecurityNavigation.razor create mode 100644 Moonlight/Shared/Views/Admin/Security/Index.razor rename Moonlight/Shared/Views/Admin/{Sys/Security.razor => Security/IpBans.razor} (65%) rename Moonlight/Shared/Views/Admin/{Sys => Security}/Malware.razor (97%) create mode 100644 Moonlight/Shared/Views/Admin/Security/PermissionGroups.razor diff --git a/Moonlight/App/Perms/PermissionStorage.cs b/Moonlight/App/Perms/PermissionStorage.cs index 8be69d83..f5ddaa91 100644 --- a/Moonlight/App/Perms/PermissionStorage.cs +++ b/Moonlight/App/Perms/PermissionStorage.cs @@ -22,6 +22,10 @@ public class PermissionStorage { return BitHelper.ReadBit(Data, permission.Index); } + catch (ArgumentOutOfRangeException) + { + return false; + } catch (Exception e) { Logger.Verbose("Error reading permissions. (Can be intentional)"); @@ -37,4 +41,15 @@ public class PermissionStorage Data = BitHelper.WriteBit(Data, permission.Index, value); } } + + public bool HasAnyPermissions() + { + foreach (var permission in Permissions.GetAllPermissions()) + { + if (this[permission]) + return true; + } + + return false; + } } \ No newline at end of file diff --git a/Moonlight/App/Perms/Permissions.cs b/Moonlight/App/Perms/Permissions.cs index ad88c641..96701835 100644 --- a/Moonlight/App/Perms/Permissions.cs +++ b/Moonlight/App/Perms/Permissions.cs @@ -261,10 +261,10 @@ public static class Permissions Description = "Manage mail settings in the admin area" }; - public static Permission AdminSysMalware = new() + public static Permission AdminSecurityMalware = new() { Index = 39, - Name = "Admin system Malware", + Name = "Admin security Malware", Description = "Manage malware settings in the admin area" }; @@ -275,11 +275,11 @@ public static class Permissions Description = "View system resources in the admin area" }; - public static Permission AdminSysSecurity = new() + public static Permission AdminSecurity = new() { Index = 41, - Name = "Admin system Security", - Description = "Manage security settings in the admin area" + Name = "Admin Security", + Description = "View security logs in the admin area" }; public static Permission AdminSysSentry = new() @@ -379,6 +379,20 @@ public static class Permissions Name = "Admin Webspaces Server New", Description = "Create a new webspace server in the admin area" }; + + public static Permission AdminSecurityIpBans = new() + { + Index = 56, + Name = "Admin security ip bans", + Description = "Manage ip bans in the admin area" + }; + + public static Permission AdminSecurityPermissionGroups = new() + { + Index = 57, + Name = "Admin security permission groups", + Description = "View, add and delete permission groups" + }; public static Permission? FromString(string name) { diff --git a/Moonlight/App/Services/Sessions/IdentityService.cs b/Moonlight/App/Services/Sessions/IdentityService.cs index 8f615b35..f9a5d763 100644 --- a/Moonlight/App/Services/Sessions/IdentityService.cs +++ b/Moonlight/App/Services/Sessions/IdentityService.cs @@ -242,11 +242,22 @@ public class IdentityService Permissions.IsReadyOnly = true; return; } - - Permissions = new PermissionStorage(BitHelper.OverwriteByteArrays( - UserPermissions.Data, - GroupPermissions.Data), - true - ); + + Permissions = new(Array.Empty()); + + foreach (var permission in Perms.Permissions.GetAllPermissions()) + { + Permissions[permission] = GroupPermissions[permission]; + } + + foreach (var permission in Perms.Permissions.GetAllPermissions()) + { + if (UserPermissions[permission]) + { + Permissions[permission] = true; + } + } + + Permissions.IsReadyOnly = true; } } \ No newline at end of file diff --git a/Moonlight/Shared/Components/Navigations/AdminSecurityNavigation.razor b/Moonlight/Shared/Components/Navigations/AdminSecurityNavigation.razor new file mode 100644 index 00000000..85589958 --- /dev/null +++ b/Moonlight/Shared/Components/Navigations/AdminSecurityNavigation.razor @@ -0,0 +1,32 @@ + + +@code +{ + [Parameter] + public int Index { get; set; } = 0; +} \ No newline at end of file diff --git a/Moonlight/Shared/Components/Partials/SidebarMenu.razor b/Moonlight/Shared/Components/Partials/SidebarMenu.razor index 9661c502..de1240ef 100644 --- a/Moonlight/Shared/Components/Partials/SidebarMenu.razor +++ b/Moonlight/Shared/Components/Partials/SidebarMenu.razor @@ -69,7 +69,7 @@ else - if (User.Admin) + if (IdentityService.Permissions.HasAnyPermissions()) {