using Core.Enumerations; using DataProviders.Collections; using DomainObjects.Documents.Users; using Microsoft.AspNetCore.Authorization; using Microsoft.Extensions.Options; using WeatherForecast.Policies.Abstractions; using WeatherForecast.Services; namespace WeatherForecast.Policies; /// /// /// public class CategoryAuthorizationHandler : AuthorizationHandlerBase { /// /// /// /// /// /// /// public CategoryAuthorizationHandler( IOptions configuration, IHttpContextAccessor contextAccessor, ISiteDataProvider siteDataProvider, IUserDataProvider userDataProvider ) : base(configuration, contextAccessor, siteDataProvider, userDataProvider) { } /// /// /// /// /// /// protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, CategoryAuthorizationRequirement requirement) { var (site, user) = GetUser(context); if (site == null || user == null) return Task.CompletedTask; var userRole = GetRole(site, user); var req = requirement.Roles.SingleOrDefault(x => x.Role == userRole); if (req == null) return Task.CompletedTask; context.Succeed(requirement); return Task.CompletedTask; } } /// /// /// public class CategoryRole { /// /// /// public Roles Role { get; private set; } /// /// /// /// public CategoryRole(Roles role) { Role = role; } } /// /// /// public class CategoryAuthorizationRequirement : AuthorizationRequirementBase { /// /// /// public List Roles { get; private set; } /// /// /// /// /// public CategoryAuthorizationRequirement(CrudActions action, List roles) : base(action) { Roles = roles; } }