Added chmod perm, modal to change, api with local/ftp/sftp (#399)

Read a fill current permissions for local driver

Finished permissions for ftp driver, read and change

Read permissions for sftp adapter

Created FilegatorFtp for a cleaner permissions integration

Implemented recursive chmod options for files/folders

Modified tests to cover permissions

Lint frontend permissions component
This commit is contained in:
Andrei Telteu
2024-04-17 18:23:21 +03:00
committed by GitHub
parent 42e50b93da
commit 27310f9d48
15 changed files with 431 additions and 13 deletions

View File

@@ -135,6 +135,9 @@
<b-dropdown-item v-if="can(['write', 'zip']) && ! isArchive(props.row)" aria-role="listitem" @click="zip($event, props.row)">
<b-icon icon="file-archive" size="is-small" /> {{ lang('Zip') }}
</b-dropdown-item>
<b-dropdown-item v-if="can(['write', 'chmod']) && props.row.permissions !== -1" aria-role="listitem" @click="chmod($event, props.row)">
<b-icon icon="lock" size="is-small" /> {{ lang('Permissions') }} ({{ props.row.permissions }})
</b-dropdown-item>
<b-dropdown-item v-if="can('write')" aria-role="listitem" @click="remove($event, props.row)">
<b-icon icon="trash-alt" size="is-small" /> {{ lang('Delete') }}
</b-dropdown-item>
@@ -164,6 +167,7 @@
import Vue from 'vue'
import Menu from './partials/Menu'
import Tree from './partials/Tree'
import Permissions from './partials/Permissions'
import Editor from './partials/Editor'
import Gallery from './partials/Gallery'
import Search from './partials/Search'
@@ -491,6 +495,37 @@ export default {
}
})
},
chmod(event, item) {
this.$modal.open({
parent: this,
hasModalCard: true,
component: Permissions,
props: {
name: item.name,
permissions: item.permissions,
isDir: item.type == 'dir',
},
events: {
saved: (permissions, recursive = null) => {
this.isLoading = true
api.chmodItems({
items: item ? [item] : this.getSelected(),
permissions: permissions,
recursive: recursive,
})
.then(() => {
this.isLoading = false
this.loadFiles()
})
.catch(error => {
this.isLoading = false
this.handleError(error)
})
this.checked = []
}
},
})
},
rename(event, item) {
this.$dialog.prompt({
message: this.lang('New name'),