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()) {