Skip to content

Commit 070771f

Browse files
committed
feat: screenshot access rights
1 parent 4ec0d6f commit 070771f

6 files changed

Lines changed: 285 additions & 73 deletions

File tree

package-lock.json

Lines changed: 69 additions & 69 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "media-pi-ui",
3-
"version": "0.11.1",
3+
"version": "0.11.2",
44
"private": true,
55
"type": "module",
66
"scripts": {

src/components/Screenshots_List.vue

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ import { useAuthStore } from '@/stores/auth.store.js'
1313
import { useAlertStore } from '@/stores/alert.store.js'
1414
import { useConfirmation } from '@/helpers/confirmation.js'
1515
import { formatFileSize } from '@/helpers/media.format.js'
16+
import {
17+
canCreateScreenshot,
18+
canDeleteScreenshot,
19+
canViewScreenshot
20+
} from '@/helpers/user.helpers.js'
1621
import AlertOutput from '@/components/AlertOutput.vue'
1722
import 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
6169
function formatDate(value) {
6270
if (!value) return ''
@@ -93,6 +101,8 @@ async function loadDevice() {
93101
}
94102
95103
async 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
})
126136
async 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
137149
async 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

Comments
 (0)