12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- 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<PermissionRequirement>
- {
- 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);
- }
- }
- }
- }
|