24 lines
808 B
C#
24 lines
808 B
C#
using Backend.Services;
|
|
|
|
namespace Backend.Security;
|
|
|
|
public sealed class AdminSessionFilter(IUserSessionService userSessionService) : IEndpointFilter
|
|
{
|
|
public async ValueTask<object?> InvokeAsync(EndpointFilterInvocationContext context, EndpointFilterDelegate next)
|
|
{
|
|
var session = await userSessionService.ResolveSessionAsync(context.HttpContext, context.HttpContext.RequestAborted);
|
|
if (session is null)
|
|
{
|
|
return Results.Unauthorized();
|
|
}
|
|
|
|
if (!AdminRoles.CanAccessAdmin(session.Role))
|
|
{
|
|
return Results.Json(new { message = "Admin access requires an elevated role." }, statusCode: StatusCodes.Status403Forbidden);
|
|
}
|
|
|
|
context.HttpContext.SetCurrentSession(session);
|
|
return await next(context);
|
|
}
|
|
}
|