diff --git a/frontend/src/views/FilesView.vue b/frontend/src/views/FilesView.vue index ef22f1e..d31bb1f 100644 --- a/frontend/src/views/FilesView.vue +++ b/frontend/src/views/FilesView.vue @@ -187,13 +187,26 @@
-
- - {{ perm.username }} - - -
+
@@ -295,6 +308,9 @@ const shareUserQuery = ref('') const selectedShareUser = ref(null) const shareUserPermission = ref('read') const shareUserReshare = ref(false) +const editingPermId = ref(null) +const editPermValue = ref('read') +const editPermReshare = ref(false) const userSearchResults = ref([]) const userPermOptions = [{ label: 'Lesen', value: 'read' }, { label: 'Schreiben', value: 'write' }, { label: 'Admin', value: 'admin' }] const linkPermOptions = [ @@ -684,6 +700,34 @@ async function removeUserShare(permId) { } } +function startEditPerm(perm) { + editingPermId.value = perm.id + editPermValue.value = perm.permission + editPermReshare.value = !!perm.can_reshare +} + +function cancelEditPerm() { + editingPermId.value = null +} + +async function saveEditPerm(perm) { + if (!shareFile.value) return + try { + await apiClient.post(`/files/${shareFile.value.id}/permissions`, { + user_id: perm.user_id, + permission: editPermValue.value, + can_reshare: editPermReshare.value, + }) + const res = await apiClient.get(`/files/${shareFile.value.id}/permissions`) + filePermissions.value = res.data + editingPermId.value = null + toast.add({ severity: 'success', summary: 'Berechtigung aktualisiert', life: 2500 }) + await filesStore.loadFiles(currentParentId()) + } catch (err) { + toast.add({ severity: 'error', summary: 'Fehler', detail: err.response?.data?.error || err.message, life: 5000 }) + } +} + async function createShare() { console.log('createShare called, shareFile:', shareFile.value?.id, 'permission:', shareLinkPermission.value) if (!shareFile.value) { @@ -886,7 +930,8 @@ onUnmounted(() => { .user-result { padding: 0.5rem 0.75rem; cursor: pointer; display: flex; align-items: center; gap: 0.5rem; font-size: 0.875rem; } .user-result:hover, .user-result.selected { background: var(--p-primary-50); } .existing-shares { margin-top: 0.5rem; } -.share-perm-item { display: flex; align-items: center; gap: 0.5rem; padding: 0.375rem 0; font-size: 0.875rem; } +.share-perm-item { display: flex; align-items: center; gap: 0.5rem; padding: 0.375rem 0; font-size: 0.875rem; flex-wrap: wrap; } +.share-perm-item.editing { background: var(--p-surface-50); padding: 0.5rem; border-radius: 4px; } .share-link-item { display: flex; justify-content: space-between; align-items: center; padding: 0.5rem 0; border-bottom: 1px solid var(--p-surface-100);