Offload compile fix
1 files 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 2fb91bb4..21d9dfd5 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) {
/// <summary>
/// Asserts that user has all the relevant guild permissions
/// </summary>
- /// <param name="permission">Permissions to require</param>
/// <param name="guildId">Guild ID</param>
/// <param name="userId">Member ID</param>
- /// <exception cref="InvalidOperationException">Has one or more missing permissions</exception>
- public async Task AssertUserHasGuildPermission(Permissions permission, long guildId, long userId) {
+ public async Task<Permissions> 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;
+ }
+
+ /// <summary>
+ /// Asserts that user has all the relevant guild permissions
+ /// </summary>
+ /// <param name="permission">Permissions to require</param>
+ /// <param name="guildId">Guild ID</param>
+ /// <param name="userId">Member ID</param>
+ /// <exception cref="InvalidOperationException">Has one or more missing permissions</exception>
+ 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<Permissions>().Where(p => !permissions.HasFlag(p) && permission.HasFlag(p)));
+ throw new PermissionException(Enum.GetValues<Permissions>().Where(p => !permissions.HasFlag(p) && permission.HasFlag(p)).ToList());
}
}
+/// <summary>
+/// Thrown when a user is missing a given permission
+/// </summary>
public class PermissionException : Exception {
- public IEnumerable<Permissions> MissingPermissions { get; }
+ /// <summary>
+ /// The list of missing permissions
+ /// </summary>
+ public ImmutableList<Permissions> MissingPermissions { get; }
- public PermissionException(IEnumerable<Permissions> missingPermissions) : base(
+ /// <inheritdoc />
+ public PermissionException(IReadOnlyCollection<Permissions> 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
|