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 { 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(); } } }