using Microsoft.AspNetCore.Authorization; namespace Distribution.Infra.Auth { public class PermissionAuthorizationHandler : AuthorizationHandler { 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); } } }