using Microsoft.AspNetCore.Authorization; using DomainObjects.Documents; using Core.Enumerations; using DataProviders.Collections; using WeatherForecast.Policies.Abstractions; using WeatherForecast.Services; using DomainObjects.Enumerations; namespace WeatherForecast.Policies; /// /// /// public class BlogAuthorizationHandler : AuthorizationHandlerBase> { /// /// /// /// /// /// public BlogAuthorizationHandler( IHttpContextAccessor contextAccessor, IUserDataProvider userDataProvider, IAccountPolicyService accountService ) : base(contextAccessor, userDataProvider, accountService) { } /// /// /// /// /// /// /// protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, BlogAuthorizationRequirement requirement, List resource) { var user = GetUser(context); if (user == null) return Task.CompletedTask; // Can only Admin, Editor, Author, Contributor (cannot set publish date) if (requirement.Action == CrudActions.Create && (user.Role != Roles.Admin && user.Role != Roles.Editor && user.Role != Roles.Author && user.Role != Roles.Contributor && (user.Role == Roles.Contributor && resource.Any(x => x.Published != null)))) return Task.CompletedTask; // Can only Admin, Editor, Author, Contributor if (requirement.Action == CrudActions.Read && (user.Role != Roles.Admin && user.Role != Roles.Editor && user.Role != Roles.Author && user.Role != Roles.Contributor)) return Task.CompletedTask; // Can only Admin, Editor, Author (own), Contributor (own, not yet pubblished) if ((requirement.Action == CrudActions.Update || requirement.Action == CrudActions.Delete) && (user.Role != Roles.Admin && user.Role != Roles.Editor && user.Role != Roles.Author && user.Role != Roles.Contributor && ((user.Role == Roles.Author || user.Role == Roles.Contributor) && resource.Any(x => x.Author != user.Id)) && (user.Role == Roles.Contributor && resource.Any(x => x.Published != null)))) return Task.CompletedTask; context.Succeed(requirement); return Task.CompletedTask; } } /// /// /// public class BlogAuthorizationRequirement : AuthorizationRequirementBase { }