45 lines
1.4 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|