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;
}
}