mirror of
https://github.com/spacebarchat/server.git
synced 2026-05-14 03:15:22 +00:00
Offload compile fix
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user