From 759edae4ab3d437f3339b2a902ac9be1b5cb4e1c Mon Sep 17 00:00:00 2001 From: Rory& Date: Fri, 8 May 2026 22:21:03 +0200 Subject: [PATCH] Offload compile fix --- .../Services/PermissionService.cs | 33 +++++++++++++++---- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/extra/admin-api/Spacebar.UApi/Services/PermissionService.cs b/extra/admin-api/Spacebar.UApi/Services/PermissionService.cs index 2fb91bb45..21d9dfd5d 100644 --- a/extra/admin-api/Spacebar.UApi/Services/PermissionService.cs +++ b/extra/admin-api/Spacebar.UApi/Services/PermissionService.cs @@ -1,3 +1,4 @@ +using System.Collections.Immutable; using Microsoft.EntityFrameworkCore; using Spacebar.Models.Db.Contexts; using Spacebar.Models.Generic.Constants; @@ -8,11 +9,9 @@ public class PermissionService(SpacebarDbContext db) { /// /// Asserts that user has all the relevant guild permissions /// - /// Permissions to require /// Guild ID /// Member ID - /// Has one or more missing permissions - public async Task AssertUserHasGuildPermission(Permissions permission, long guildId, long userId) { + public async Task GetUserGuildPermissions(long guildId, long userId) { var member = await db.Members .Include(x => x.Roles) .SingleAsync(x => x.Id == userId && x.GuildId == guildId); @@ -26,16 +25,36 @@ public class PermissionService(SpacebarDbContext db) { permissions &= Permissions.ViewChannel | Permissions.ReadMessageHistory; } + return permissions; + } + + /// + /// Asserts that user has all the relevant guild permissions + /// + /// Permissions to require + /// Guild ID + /// Member ID + /// Has one or more missing permissions + public async Task AssertUserHasGuildPermission(Permissions permission, long guildId, long userId) { + var permissions = await GetUserGuildPermissions(guildId, userId); + if (!permissions.HasFlag(permission)) - throw new PermissionException(Enum.GetValues().Where(p => !permissions.HasFlag(p) && permission.HasFlag(p))); + throw new PermissionException(Enum.GetValues().Where(p => !permissions.HasFlag(p) && permission.HasFlag(p)).ToList()); } } +/// +/// Thrown when a user is missing a given permission +/// public class PermissionException : Exception { - public IEnumerable MissingPermissions { get; } + /// + /// The list of missing permissions + /// + public ImmutableList MissingPermissions { get; } - public PermissionException(IEnumerable missingPermissions) : base( + /// + public PermissionException(IReadOnlyCollection missingPermissions) : base( $"You do not have the required permissions to perform this action: {string.Join(", ", missingPermissions)}") { - MissingPermissions = missingPermissions; + MissingPermissions = missingPermissions.ToImmutableList(); } } \ No newline at end of file