using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc.ApplicationModels; using Microsoft.AspNetCore.Mvc.Authorization; namespace SameBeat.Api.Konfiguracja; /// /// Kazdy kontroler, ktorego trasa zaczyna sie od "api/host", jest automatycznie chroniony /// [Authorize] -- bez potrzeby pamietania o atrybucie przy kazdym nowym kontrolerze w kolejnych /// etapach (scena, mikrofon, moderacja). To realizuje wymog "chroni wszystkie przyszle /// endpointy /api/host/*" z fundamentu backendu. /// public class KonwencjaAutoryzacjiHosta : IControllerModelConvention { private const string PrefiksChronionejTrasy = "api/host"; public void Apply(ControllerModel kontroler) { var maChronionaTrase = kontroler.Selectors .Select(s => s.AttributeRouteModel?.Template) .Any(szablon => szablon is not null && szablon.TrimStart('/').StartsWith(PrefiksChronionejTrasy, StringComparison.OrdinalIgnoreCase)); if (maChronionaTrase) { kontroler.Filters.Add(new AuthorizeFilter()); } } }