Skip to content

Commit 68fc60a

Browse files
committed
feat: add v-can-piece directive and gate calendar view by permission
1 parent 951a8da commit 68fc60a

2 files changed

Lines changed: 35 additions & 2 deletions

File tree

src/directives/canPiece.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { canAccessPiece } from '../services/PermissionService'
2+
import { useUserStore } from '../store/user'
3+
4+
export default {
5+
mounted(el: HTMLElement, binding: any) {
6+
try {
7+
const userStore = useUserStore()
8+
const role = userStore.primaryRole
9+
const user = { role }
10+
const piece = binding.value
11+
if (!canAccessPiece(piece as any, user as any)) {
12+
el.style.display = 'none'
13+
}
14+
} catch (e) {
15+
el.style.display = 'none'
16+
}
17+
}
18+
}

src/views/EventsView.vue

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,27 @@
11
<template>
22
<div>
33
<h2>Termine</h2>
4-
<p>Kalenderintegration via CalDAV / Nextcloud (Platzhalter)</p>
4+
<div v-if="mayAccessCalendar">
5+
<p>Kalenderintegration via CalDAV / Nextcloud (Platzhalter)</p>
6+
<!-- Hier kommt die Calendar-Komponente / Sync-Logik -->
7+
</div>
8+
<div v-else>
9+
<p>Sie haben keine Berechtigung, den Kalender einzusehen.</p>
10+
</div>
511
</div>
612
</template>
713

814
<script lang="ts" setup>
9-
// TODO: implement event list with CalDAV sync
15+
import { computed } from 'vue'
16+
import { useUserStore } from '@/store/user'
17+
import { canAccessCalendar } from '@/services/PermissionService'
18+
19+
const userStore = useUserStore()
20+
const mayAccessCalendar = computed(() => {
21+
const role = userStore.primaryRole
22+
const user = { role }
23+
return canAccessCalendar(user as any)
24+
})
1025
</script>
1126

1227
<style scoped>

0 commit comments

Comments
 (0)