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);
            }
        }
Exemplo n.º 2
0
        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);
        }