using Microsoft.AspNetCore.Authorization; using System; using System.Collections.Generic; using System.Linq; using System.Security.Claims; using System.Text; using System.Threading.Tasks; using Fuel.Application.Service; namespace Fuel.Application.Authorization { public class PermissionHandler : AuthorizationHandler { private readonly IUserService _userService; public PermissionHandler(IUserService userService) { _userService = userService; } protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, PermissionRequirement requirement) { var user = context.User; if (user == null || !user.Identity.IsAuthenticated) { return; } // 从用户声明中获取用户 ID var userIdClaim = user.FindFirst(ClaimTypes.NameIdentifier); if (userIdClaim == null) { return; } var userId = userIdClaim.Value; // 查询用户的权限列表 var permissions = await _userService.GetUserPermissions(userId); // 检查用户是否有足够的权限 if (permissions.Contains(requirement.Permission)) { context.Succeed(requirement); } } } }