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;
}
}
}