Beispiel #1
0
    def check(self, skip_permission_checks=False):
        from wagtail.core.models import UserPagePermissionsProxy

        # Essential data model checks
        if self.page._state.adding:
            raise CopyPageIntegrityError(
                'Page.copy() called on an unsaved page')

        if self.to and self.recursive and (self.to.id == self.page.id
                                           or self.to.is_descendant_of(
                                               self.page)):
            raise CopyPageIntegrityError(
                "You cannot copy a tree branch recursively into itself")

        # Permission checks
        if self.user and not skip_permission_checks:
            to = self.to
            if to is None:
                to = self.page.get_parent()

            if not self.page.permissions_for_user(self.user).can_copy_to(
                    to, self.recursive):
                raise CopyPagePermissionError(
                    "You do not have permission to copy this page")

            if self.keep_live:
                destination_perms = UserPagePermissionsProxy(
                    self.user).for_page(self.to)

                if not destination_perms.can_publish_subpage():
                    raise CopyPagePermissionError(
                        "You do not have permission to publish a page at the destination"
                    )