@@ -13,6 +13,11 @@ import { useAuthStore } from '@/stores/auth.store.js'
1313import { useAlertStore } from ' @/stores/alert.store.js'
1414import { useConfirmation } from ' @/helpers/confirmation.js'
1515import { formatFileSize } from ' @/helpers/media.format.js'
16+ import {
17+ canCreateScreenshot ,
18+ canDeleteScreenshot ,
19+ canViewScreenshot
20+ } from ' @/helpers/user.helpers.js'
1621import AlertOutput from ' @/components/AlertOutput.vue'
1722import ScreenshotViewDialog from ' @/components/Screenshot_View_Dialog.vue'
1823
@@ -57,6 +62,9 @@ const deviceTitle = computed(() => {
5762 if (device .value .id === props .deviceId && device .value .name ) return device .value .name
5863 return props .deviceId
5964})
65+ const canOpenPhotos = computed (() => canViewScreenshot (authStore .user , device .value ))
66+ const canTakePhotos = computed (() => canCreateScreenshot (authStore .user , device .value ))
67+ const canDeletePhotos = computed (() => canDeleteScreenshot (authStore .user , device .value ))
6068
6169function formatDate (value ) {
6270 if (! value) return ' —'
@@ -93,6 +101,8 @@ async function loadDevice() {
93101}
94102
95103async function openPhoto (item ) {
104+ if (! canOpenPhotos .value ) return
105+
96106 try {
97107 await screenshotsStore .open (item .id )
98108 screenshotDialogTakenAt .value = item .timeCreated || null
@@ -124,6 +134,8 @@ watch(screenshotDialogOpen, (isOpen) => {
124134 }
125135})
126136async function takePhoto () {
137+ if (! canTakePhotos .value ) return
138+
127139 try {
128140 await screenshotsStore .create (props .deviceId )
129141 screenshotDialogTakenAt .value = new Date ()
@@ -135,6 +147,8 @@ async function takePhoto() {
135147}
136148
137149async function deletePhoto (item ) {
150+ if (! canDeletePhotos .value ) return
151+
138152 const confirmed = await confirmDelete (item .originalFilename || ` фотография #${ item .id } ` , ' фотографию' )
139153 if (! confirmed) return
140154
@@ -211,6 +225,7 @@ onBeforeUnmount(() => {
211225 < / div>
212226 < div class = " header-actions header-actions-group" >
213227 < ActionButton
228+ v- if = " canTakePhotos"
214229 data- test= " take-photo-button"
215230 : item= " {}"
216231 iconSize= " 2x"
@@ -296,6 +311,7 @@ onBeforeUnmount(() => {
296311 < template #[` item.actions` ]= " { item }" >
297312 < div class = " actions-container" >
298313 < ActionButton
314+ v- if = " canOpenPhotos"
299315 data- test= " open-photo-button"
300316 : item= " item"
301317 icon= " fa-solid fa-image"
@@ -304,6 +320,7 @@ onBeforeUnmount(() => {
304320 @click= " openPhoto(item)"
305321 / >
306322 < ActionButton
323+ v- if = " canDeletePhotos"
307324 data- test= " delete-photo-button"
308325 : item= " item"
309326 icon= " fa-solid fa-trash-can"
0 commit comments