using BCards.Web.Services; namespace BCards.Web.Middleware { public class ModerationAuthMiddleware { private readonly RequestDelegate _next; private readonly IModerationAuthService _moderationAuth; public ModerationAuthMiddleware(RequestDelegate next, IModerationAuthService moderationAuth) { _next = next; _moderationAuth = moderationAuth; } public async Task InvokeAsync(HttpContext context) { var path = context.Request.Path.Value?.ToLowerInvariant(); // Verificar se é uma rota de moderação if (path != null && path.StartsWith("/moderation")) { // Verificar se usuário está autenticado if (!context.User.Identity?.IsAuthenticated == true) { context.Response.Redirect("/Auth/Login?returnUrl=" + Uri.EscapeDataString(context.Request.Path)); return; } // Verificar se é moderador if (!_moderationAuth.IsUserModerator(context.User)) { context.Response.StatusCode = 403; await context.Response.WriteAsync("Acesso negado. Você não tem permissão para acessar esta área."); return; } // Adicionar flag para usar nas views context.Items["IsModerator"] = true; } await _next(context); } } }