Files
monorepo/LCU.API.Operations.IncentiveAPI/LCU.API.Internal.Operations.IncentiveApi/Authorization/PermissionAuthorizationHandler.cs
T
2026-03-17 09:53:09 -05:00

45 lines
1.4 KiB
C#

using LCU.API.Internal.Operations.IncentiveApiLib.Persistence;
using LCU.API.Internal.Operations.IncentiveApiLib.Services;
using Microsoft.AspNetCore.Authorization;
namespace LCU.API.Internal.Operations.IncentiveApi.Authorization;
public class PermissionAuthorizationHandler : AuthorizationHandler<PermissionRequirement>
{
private readonly ICurrentUserService _currentUserService;
private readonly IUserService _userService;
public PermissionAuthorizationHandler(ICurrentUserService currentUserService, IUserService userService)
{
_currentUserService = currentUserService;
_userService = userService;
}
protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context,
PermissionRequirement requirement)
{
try
{
var allowedPermissions = requirement.Permissions.Split(',').ToList();
var appUser = _currentUserService.GetCurrentUser();
if (appUser.Email == null)
{
context.Fail();
return;
}
if (await _userService.UserHasAnyRequiredPermission(appUser.Email, allowedPermissions))
{
context.Succeed(requirement);
return;
}
context.Fail();
}
catch (Exception ex)
{
Log.Error(ex, $"Failure in {GetType().Name}");
context.Fail();
}
}
}