diff --git a/Endpoints/SuggestEndpoints.cs b/Endpoints/SuggestEndpoints.cs index d28db58..f9c30dc 100644 --- a/Endpoints/SuggestEndpoints.cs +++ b/Endpoints/SuggestEndpoints.cs @@ -116,10 +116,6 @@ public static class SuggestEndpoints if (player is null) return Results.Unauthorized(); var isAdmin = await EndpointHelpers.IsAdmin(ctx, db); - var phase = await EndpointHelpers.GetPhase(db, player.Id); - if (!isAdmin && phase != Phase.Suggest) - return Results.BadRequest(new { error = "Suggestions are frozen; you can no longer delete them." }); - var suggestion = isAdmin ? await db.Suggestions.FirstOrDefaultAsync(s => s.Id == id) : await db.Suggestions.FirstOrDefaultAsync(s => s.Id == id && s.PlayerId == player.Id); @@ -144,13 +140,7 @@ public static class SuggestEndpoints var player = await EndpointHelpers.GetAuthenticatedPlayer(ctx, db); var isAdmin = await EndpointHelpers.IsAdmin(ctx, db); - if (!isAdmin) - { - if (player is null) return Results.Unauthorized(); - - var phase = await EndpointHelpers.GetPhase(db, player.Id); - // Non-admins can edit optional fields after Suggest, but not the name - } + if (!isAdmin && player is null) return Results.Unauthorized(); if (string.IsNullOrWhiteSpace(request.Name) || request.Name.Length > 100) { diff --git a/Infrastructure/PhaseRequirementFilter.cs b/Infrastructure/PhaseRequirementFilter.cs index e9640be..6b8e726 100644 --- a/Infrastructure/PhaseRequirementFilter.cs +++ b/Infrastructure/PhaseRequirementFilter.cs @@ -7,10 +7,12 @@ namespace GameList.Infrastructure; public class PhaseRequirementFilter : IEndpointFilter { private readonly Phase _required; + private readonly bool _allowAdminOverride; - public PhaseRequirementFilter(Phase required) + public PhaseRequirementFilter(Phase required, bool allowAdminOverride = false) { _required = required; + _allowAdminOverride = allowAdminOverride; } public async ValueTask InvokeAsync(EndpointFilterInvocationContext context, EndpointFilterDelegate next) @@ -21,7 +23,7 @@ public class PhaseRequirementFilter : IEndpointFilter if (player is null) return Results.Unauthorized(); var phase = await EndpointHelpers.GetPhase(db, player.Id); - if (phase != _required) + if (phase != _required && !(_allowAdminOverride && player.IsAdmin)) { return EndpointHelpers.PhaseMismatch(_required, phase); }