25 lines
815 B
C#
25 lines
815 B
C#
using Microsoft.AspNetCore.Authorization;
|
|
|
|
namespace Distribution.Infra.Authorization;
|
|
|
|
public class PermissionAuthorizationHandler : AuthorizationHandler<PermissionRequirement>
|
|
{
|
|
private readonly IPermissionService _permissionService;
|
|
|
|
public PermissionAuthorizationHandler(IPermissionService permissionService)
|
|
{
|
|
_permissionService = permissionService;
|
|
}
|
|
|
|
protected override async Task HandleRequirementAsync(
|
|
AuthorizationHandlerContext context, PermissionRequirement requirement)
|
|
{
|
|
var roleIdClaim = context.User.FindFirst("role_id")?.Value;
|
|
if (!Guid.TryParse(roleIdClaim, out var roleId))
|
|
return;
|
|
|
|
if (await _permissionService.HasPermissionAsync(roleId, requirement.PermissionCode))
|
|
context.Succeed(requirement);
|
|
}
|
|
}
|