PermissionHandler.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using Microsoft.AspNetCore.Authorization;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Security.Claims;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using Fuel.Application.Service;
  9. namespace Fuel.Application.Authorization
  10. {
  11. public class PermissionHandler : AuthorizationHandler<PermissionRequirement>
  12. {
  13. private readonly IUserService _userService;
  14. public PermissionHandler(IUserService userService)
  15. {
  16. _userService = userService;
  17. }
  18. protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, PermissionRequirement requirement)
  19. {
  20. var user = context.User;
  21. if (user == null || !user.Identity.IsAuthenticated)
  22. {
  23. return;
  24. }
  25. // 从用户声明中获取用户 ID
  26. var userIdClaim = user.FindFirst(ClaimTypes.NameIdentifier);
  27. if (userIdClaim == null)
  28. {
  29. return;
  30. }
  31. var userId = userIdClaim.Value;
  32. // 查询用户的权限列表
  33. var permissions = await _userService.GetUserPermissions(userId);
  34. // 检查用户是否有足够的权限
  35. if (permissions.Contains(requirement.Permission))
  36. {
  37. context.Succeed(requirement);
  38. }
  39. }
  40. }
  41. }