using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Security.Claims; using System.Text; using System.Threading.Tasks; namespace Api.SignToken { public class PermissionFilter : Attribute, IAsyncAuthorizationFilter { public PermissionFilter(string name) { Name = name; } public string Name { get; set; } public async Task OnAuthorizationAsync(AuthorizationFilterContext context) { var authorizationService = context.HttpContext.RequestServices.GetRequiredService(); var authorizationResult = await authorizationService.AuthorizeAsync(context.HttpContext.User, null, new PermissionAuthorizationRequirement(Name)); if (!authorizationResult.Succeeded) { context.Result = new ForbidResult(); } } } }