summary refs log tree commit diff
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2026-05-08 22:21:03 +0200
committerRory& <root@rory.gay>2026-05-08 22:21:03 +0200
commit759edae4ab3d437f3339b2a902ac9be1b5cb4e1c (patch)
treeb2ea35a02db6220a6d72f083ddcdfa6dbdb98a87
parentUpdate CS models (diff)
downloadserver-ts-759edae4ab3d437f3339b2a902ac9be1b5cb4e1c.tar.xz
Offload compile fix
-rw-r--r--extra/admin-api/Spacebar.UApi/Services/PermissionService.cs33
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