This commit is contained in:
Zeeshaun
2026-03-17 09:53:09 -05:00
parent cdcba54aa4
commit 1a0702a79a
590 changed files with 62058 additions and 0 deletions
@@ -0,0 +1,44 @@
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();
}
}
}
@@ -0,0 +1,32 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.Options;
namespace LCU.API.Internal.Operations.IncentiveApi.Authorization;
public class PermissionPolicyProvider : IAuthorizationPolicyProvider
{
const string POLICY_PREFIX = "Permission";
public DefaultAuthorizationPolicyProvider FallbackPolicyProvider { get; }
public PermissionPolicyProvider(IOptions<AuthorizationOptions> options)
{
FallbackPolicyProvider = new DefaultAuthorizationPolicyProvider(options);
}
public Task<AuthorizationPolicy> GetDefaultPolicyAsync() => FallbackPolicyProvider.GetDefaultPolicyAsync();
public Task<AuthorizationPolicy> GetFallbackPolicyAsync() => FallbackPolicyProvider.GetFallbackPolicyAsync();
public Task<AuthorizationPolicy> GetPolicyAsync(string policyName)
{
if (policyName.StartsWith(POLICY_PREFIX, StringComparison.OrdinalIgnoreCase))
{
var allowedPermissions = policyName.Substring(POLICY_PREFIX.Length);
var policy = new AuthorizationPolicyBuilder();
policy.AddRequirements(new PermissionRequirement(allowedPermissions));
return Task.FromResult(policy.Build());
}
return FallbackPolicyProvider.GetPolicyAsync(policyName);
}
}
@@ -0,0 +1,12 @@
using Microsoft.AspNetCore.Authorization;
namespace LCU.API.Internal.Operations.IncentiveApi.Authorization;
public class PermissionRequirement : IAuthorizationRequirement
{
public string Permissions { get; private set; }
public PermissionRequirement(string permissions)
{
Permissions = permissions;
}
}
@@ -0,0 +1,17 @@
using Microsoft.AspNetCore.Authorization;
namespace LCU.API.Internal.Operations.IncentiveApi.Authorization;
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class RequirePermissionAttribute : AuthorizeAttribute
{
const string POLICY_PREFIX = "Permission";
public RequirePermissionAttribute(string permissions) => Permissions = permissions;
public string Permissions
{
get => Policy.Substring(POLICY_PREFIX.Length);
set => Policy = $"{POLICY_PREFIX}{value}";
}
}