using Core.Enumerations; using ExtensionMethods; using Extensions; using Microsoft.AspNetCore.Authorization; using WeatherForecast.Services; namespace WeatherForecast.Policies { /// /// /// public class CrudAuthorizationHandler : AuthorizationHandler { private readonly IHttpContextAccessor _contextAccessor; private readonly IUserService _authenticationService; /// /// /// /// /// public CrudAuthorizationHandler( IHttpContextAccessor contextAccessor, IUserService authenticationService ) { _contextAccessor = contextAccessor; _authenticationService = authenticationService; } /// /// /// /// /// /// protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, CrudActionRequirement requirement) { var user = context.User; var identity = user.Identity; var name = identity?.Name; var userId = name?.ToNullableGuid(); var request = _contextAccessor?.HttpContext?.Request; var bearerToken = request?.GeBearerToken(); if (_authenticationService.VerifyToken(userId, bearerToken, requirement.Controller, requirement.Action).IsSuccess) context.Succeed(requirement); return Task.CompletedTask; } } /// /// /// public class CrudActionRequirement : IAuthorizationRequirement { /// /// /// public WebapiControllers Controller { get; } /// /// /// public CrudActions Action { get; } /// /// /// public bool SameAuthor { get; } /// /// /// /// public CrudActionRequirement(WebapiControllers controller, CrudActions crudAction, bool sameAuthor = false) { Controller = controller; Action = crudAction; SameAuthor = sameAuthor; } } }