diff --git a/resources/vue/components/courseware/CoursewareTree.vue b/resources/vue/components/courseware/CoursewareTree.vue
index dfab4d16475db40888b2b18b46dfd71ada8ffb8c..e6c765fa3769e63c8f5f08703aaba805fb0b2d8e 100644
--- a/resources/vue/components/courseware/CoursewareTree.vue
+++ b/resources/vue/components/courseware/CoursewareTree.vue
@@ -89,7 +89,8 @@ export default {
             unlockObject: 'unlockObject',
             sortChildrenInStructualElements: 'sortChildrenInStructualElements',
             loadStructuralElement: 'loadStructuralElement',
-            setAssistiveLiveContents: 'setAssistiveLiveContents'
+            setAssistiveLiveContents: 'setAssistiveLiveContents',
+            companionError: 'companionError',
          }),
         updateNestedChildren() {
             this.nestedChildren = this.getNestedChildren(this.rootElement);
@@ -119,10 +120,20 @@ export default {
             const tree = this.$refs.tree;
             const currentScrollPosition = tree.offsetParent.scrollTop;
             this.processing = true;
+            await this.loadStructuralElement(data.newParent);
+            const newParent = this.structuralElementById({ id: data.newParent });
+            if (!newParent.attributes['can-edit']) {
+                this.processing = false;
+                this.updateNestedChildren();
+                this.companionError({
+                    info: this.$gettext('Verschieben nicht möglich. Sie haben keine Schreibrechte für die Ziel-Seite.')
+                });
+                return;
+            }
             if (data.oldParent !== data.newParent) {
                 await this.lockObject({ id: data.id, type: 'courseware-structural-elements' });
                 let element = this.structuralElementById({ id: data.id });
-                element.relationships.parent.data.id = data.newParent;
+                element.relationships.parent.data.id = newParent.id;
                 await this.updateStructuralElement({
                     element: element,
                     id: element.id,
@@ -130,8 +141,8 @@ export default {
                 await this.unlockObject({ id: data.id, type: 'courseware-structural-elements' });
                 await this.loadStructuralElement(data.id);
             }
-            await this.loadStructuralElement(data.newParent);
-            const parent = this.structuralElementById({ id: data.newParent });
+            await this.loadStructuralElement(newParent.id);
+            const parent = this.structuralElementById({ id: newParent.id });
             await this.sortChildrenInStructualElements({parent: parent, children: data.sortArray});
             this.updateNestedChildren();
             this.processing = false;
diff --git a/resources/vue/components/courseware/CoursewareTreeItem.vue b/resources/vue/components/courseware/CoursewareTreeItem.vue
index 1869c77dbeed73d279a09e0ff366ef41b6146be0..6b704fe18bdbcc4c3566035286057d1ab3c577e3 100644
--- a/resources/vue/components/courseware/CoursewareTreeItem.vue
+++ b/resources/vue/components/courseware/CoursewareTreeItem.vue
@@ -8,7 +8,7 @@
     >
         <div class="cw-tree-item-wrapper">
             <span
-                v-if="editMode && depth > 0"
+                v-if="editMode && depth > 0 && canEdit"
                 class="cw-sortable-handle"
                 :tabindex="0"
                 aria-describedby="operation"
@@ -270,6 +270,9 @@ export default {
                 ghostClass: "cw-tree-item-ghost"
             };
         },
+        canEdit() {
+            return this.element.attributes['can-edit'];
+        }
     },
     methods: {
         ...mapActions({
@@ -436,4 +439,4 @@ export default {
         },
     }
 };
-</script>
\ No newline at end of file
+</script>