diff --git a/aleksis/apps/chronos/frontend/components/calendar_feeds/details/LessonDetails.vue b/aleksis/apps/chronos/frontend/components/calendar_feeds/details/LessonDetails.vue
index 3c48211f95dc43e022dccff838100e43d58ea842..2453c3e9e066d55b4c297022a38659e85f7ef65e 100644
--- a/aleksis/apps/chronos/frontend/components/calendar_feeds/details/LessonDetails.vue
+++ b/aleksis/apps/chronos/frontend/components/calendar_feeds/details/LessonDetails.vue
@@ -95,7 +95,7 @@
           </v-list-item-title>
         </v-list-item-content>
       </v-list-item>
-      <v-card-actions>
+      <v-card-actions v-if="checkPermission('chronos.edit_substitution_rule')">
         <edit-button
           i18n-key="chronos.event.amend.button"
           @click="amendEvent.open = true"
@@ -161,6 +161,7 @@
 </template>
 
 <script>
+import permissionsMixin from "aleksis.core/mixins/permissions.js";
 import calendarFeedDetailsMixin from "aleksis.core/mixins/calendarFeedDetails.js";
 import BaseCalendarFeedDetails from "aleksis.core/components/calendar/BaseCalendarFeedDetails.vue";
 import CalendarStatusChip from "aleksis.core/components/calendar/CalendarStatusChip.vue";
@@ -191,7 +192,7 @@ export default {
     EditButton,
     DialogObjectForm,
   },
-  mixins: [calendarFeedDetailsMixin, lessonEvent],
+  mixins: [permissionsMixin, calendarFeedDetailsMixin, lessonEvent],
   data() {
     return {
       amendEvent: {
@@ -264,5 +265,8 @@ export default {
     amendableTeachers: gqlPersons,
     amendableRooms: gqlRooms,
   },
+  mounted() {
+    this.addPermissions(["chronos.edit_substitution_rule"]);
+  },
 };
 </script>