using Microsoft.AspNetCore.Authorization; using System.Threading.Tasks; using Umbraco.Core.Models; using Umbraco.Core.Security; using Umbraco.Core.Services; namespace Umbraco.Web.BackOffice.Authorization { /// /// Used to authorize if the user has the correct permission access to the content for the specified /// public class ContentPermissionsResourceHandler : MustSatisfyRequirementAuthorizationHandler { private readonly IBackOfficeSecurityAccessor _backofficeSecurityAccessor; private readonly ContentPermissions _contentPermissions; public ContentPermissionsResourceHandler( IBackOfficeSecurityAccessor backofficeSecurityAccessor, ContentPermissions contentPermissions) { _backofficeSecurityAccessor = backofficeSecurityAccessor; _contentPermissions = contentPermissions; } protected override Task IsAuthorized(AuthorizationHandlerContext context, ContentPermissionsResourceRequirement requirement, ContentPermissionsResource resource) { var permissionResult = resource.NodeId.HasValue ? _contentPermissions.CheckPermissions( resource.NodeId.Value, _backofficeSecurityAccessor.BackOfficeSecurity.CurrentUser, out IContent _, resource.PermissionsToCheck) : _contentPermissions.CheckPermissions( resource.Content, _backofficeSecurityAccessor.BackOfficeSecurity.CurrentUser, resource.PermissionsToCheck); return Task.FromResult(permissionResult != ContentPermissions.ContentAccess.Denied); } } }