protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, PermissionRequirement requirement) { if (context.HasSucceeded) { // This handler is not revoking any pre-existing grants. return; } if (context.Resource == null) { return; } var contentItem = context.Resource as ContentItem; Permission permission = null; if (contentItem != null) { if (OwnerVariationExists(requirement.Permission) && HasOwnership(context.User, contentItem)) { permission = GetOwnerVariation(requirement.Permission); } } var contentTypePermission = ContentTypePermissions.ConvertToDynamicPermission(permission ?? requirement.Permission); if (contentTypePermission != null) { // The resource can be a content type name var contentType = contentItem != null ? contentItem.ContentType : Convert.ToString(context.Resource.ToString()) ; if (!String.IsNullOrEmpty(contentType)) { permission = ContentTypePermissions.CreateDynamicPermission(contentTypePermission, contentType); } } if (permission == null) { return; } // Lazy load to prevent circular dependencies var authorizationService = _serviceProvider.GetService <IAuthorizationService>(); if (await authorizationService.AuthorizeAsync(context.User, permission)) { context.Succeed(requirement); } }
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, PermissionRequirement requirement) { if (context.HasSucceeded) { // This handler is not revoking any pre-existing grants. return(Task.CompletedTask); } if (context.Resource == null) { return(Task.CompletedTask); } var contentItem = context.Resource as ContentItem; if (contentItem != null) { if (OwnerVariationExists(requirement.Permission) && HasOwnership(context.User, contentItem)) { requirement.Permission = GetOwnerVariation(requirement.Permission); } } var contentTypePermission = ContentTypePermissions.ConvertToDynamicPermission(requirement.Permission); if (contentTypePermission == null) { return(Task.CompletedTask); } // The resource can be a content type name var contentType = contentItem != null ? contentItem.ContentType : Convert.ToString(context.Resource.ToString()) ; if (String.IsNullOrEmpty(contentType)) { return(Task.CompletedTask); } requirement.Permission = ContentTypePermissions.CreateDynamicPermission(contentTypePermission, contentType); return(Task.CompletedTask); }