using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization.Infrastructure; using Microsoft.AspNetCore.Identity; namespace Selector.Model.Authorisation { public class UserIsSelfAuthHandler : AuthorizationHandler { private readonly UserManager userManager; public UserIsSelfAuthHandler(UserManager userManager) { this.userManager = userManager; } protected override Task HandleRequirementAsync( AuthorizationHandlerContext context, OperationAuthorizationRequirement requirement, ApplicationUser resource ) { if (context.User == null || resource == null) { return Task.CompletedTask; } if (requirement.Name != Constants.ReadOpName && requirement.Name != Constants.UpdateOpName && requirement.Name != Constants.DeleteOpName) { return Task.CompletedTask; } if (resource.Id == userManager.GetUserId(context.User)) { context.Succeed(requirement); } return Task.CompletedTask; } } }