using System.Threading.Tasks; using gehGassi.Web.Auth.Requirements; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; namespace gehGassi.Web.Auth.AuthorizationHandlers { /// /// Handler für die Prüfung auf Rollen-Requirement /// public class IsInRoleHandler : AuthorizationHandler { private readonly IHttpContextAccessor _httpContextAccessor; /// /// Erstellt eine Instanz /// /// HTTP-Context public IsInRoleHandler(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } /// /// Makes a decision if authorization is allowed based on a specific requirement. /// /// The authorization context. /// The requirement to evaluate. protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, IsInRoleRequirement requirement) { if (_httpContextAccessor?.HttpContext?.User?.Identity != null && _httpContextAccessor.HttpContext.User.Identity.IsAuthenticated) { foreach (var role in requirement.Roles) { if (_httpContextAccessor.HttpContext.User.IsInRole(role)) { context.Succeed(requirement); break; } } } else { context.Fail(); } return Task.CompletedTask; } } }