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