using DataProviders.Collections; using DomainObjects.Documents; using DomainObjects.Documents.Users; using Microsoft.AspNetCore.Authorization; using Microsoft.Extensions.Options; using WeatherForecast.Policies.Abstractions; namespace WeatherForecast.Policies { /// /// /// public class ShopCartAuthorizationHandler : AuthorizationHandlerBase> { /// /// /// /// /// /// /// public ShopCartAuthorizationHandler( IOptions configuration, IHttpContextAccessor contextAccessor, ISiteDataProvider siteDataProvider, IUserDataProvider userDataProvider ) : base(configuration, contextAccessor, siteDataProvider, userDataProvider) { } /// /// /// /// /// /// /// protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, ShopCartAuthorizationRequirement requirement, List resource) { var (site, user) = GetUser(context); if (site == null || user == null) return Task.CompletedTask; var userRole = GetRole(site, user); // Leave only admin to manage others carts if (userRole != Roles.Admin && resource.Any(x => x.UserId != user.Id)) return Task.CompletedTask; context.Succeed(requirement); return Task.CompletedTask; } } /// /// /// public class ShopCartAuthorizationRequirement : AuthorizationRequirementBase { } }