mirror of
https://github.com/filegator/filegator.git
synced 2025-08-13 10:04:08 +02:00
initial commit
This commit is contained in:
206
frontend/views/partials/UserEdit.vue
Normal file
206
frontend/views/partials/UserEdit.vue
Normal file
@@ -0,0 +1,206 @@
|
||||
<template>
|
||||
<div class="modal-card">
|
||||
<header class="modal-card-head">
|
||||
<p class="modal-card-title">{{ user.name }}</p>
|
||||
</header>
|
||||
<section class="modal-card-body">
|
||||
<form @submit.prevent="save">
|
||||
|
||||
<div v-if="user.role == 'user' || user.role == 'admin'" class="field">
|
||||
|
||||
<b-field :label="lang('Role')">
|
||||
<b-select v-model="formFields.role" :placeholder="lang('Role')" expanded required>
|
||||
<option value="user" key="user">{{ lang('User') }}</option>
|
||||
<option value="admin" key="admin">{{ lang('Admin') }}</option>
|
||||
</b-select>
|
||||
</b-field>
|
||||
|
||||
<b-field :label="lang('Username')" :type="formErrors.username ? 'is-danger' : ''" :message="formErrors.username">
|
||||
<b-input v-model="formFields.username" @keydown.native="formErrors.username = ''"></b-input>
|
||||
</b-field>
|
||||
|
||||
<b-field :label="lang('Name')" :type="formErrors.name ? 'is-danger' : ''" :message="formErrors.name">
|
||||
<b-input v-model="formFields.name" @keydown.native="formErrors.name = ''"></b-input>
|
||||
</b-field>
|
||||
|
||||
<b-field :label="lang('Password')" :type="formErrors.password ? 'is-danger' : ''" :message="formErrors.password">
|
||||
<b-input v-model="formFields.password" @keydown.native="formErrors.password = ''" :placeholder="action == 'edit' ? lang('Leave blank for no change') : ''" password-reveal></b-input>
|
||||
</b-field>
|
||||
|
||||
</div>
|
||||
|
||||
<b-field :label="lang('Homedir')" :type="formErrors.homedir ? 'is-danger' : ''" :message="formErrors.homedir">
|
||||
<b-input v-model="formFields.homedir" @focus="selectDir"></b-input>
|
||||
</b-field>
|
||||
|
||||
<b-field :label="lang('Permissions')">
|
||||
<div class="block">
|
||||
<b-checkbox v-model="permissions.read">
|
||||
{{ lang('Read') }}
|
||||
</b-checkbox>
|
||||
<b-checkbox v-model="permissions.write">
|
||||
{{ lang('Write') }}
|
||||
</b-checkbox>
|
||||
<b-checkbox v-model="permissions.upload">
|
||||
{{ lang('Upload') }}
|
||||
</b-checkbox>
|
||||
<b-checkbox v-model="permissions.download">
|
||||
{{ lang('Download') }}
|
||||
</b-checkbox>
|
||||
<b-checkbox v-model="permissions.batchdownload">
|
||||
{{ lang('Batch Download') }}
|
||||
</b-checkbox>
|
||||
<b-checkbox v-model="permissions.zip">
|
||||
{{ lang('Zip') }}
|
||||
</b-checkbox>
|
||||
</div>
|
||||
</b-field>
|
||||
|
||||
</form>
|
||||
</section>
|
||||
<footer class="modal-card-foot">
|
||||
<button class="button" type="button" @click="$parent.close()">{{ lang('Close') }}</button>
|
||||
<button class="button is-primary" type="button" @click="confirmSave">{{ lang('Save') }}</button>
|
||||
</footer>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Tree from './Tree'
|
||||
import api from '../../api/api'
|
||||
|
||||
export default {
|
||||
name: 'UserEdit',
|
||||
components: { Tree },
|
||||
props: [ 'user', 'action' ],
|
||||
computed: {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
formFields: {
|
||||
role: this.user.role,
|
||||
name: this.user.name,
|
||||
username: this.user.username,
|
||||
homedir: this.user.homedir,
|
||||
password: '',
|
||||
},
|
||||
formErrors: {},
|
||||
permissions: {
|
||||
read: _.find(this.user.permissions, p => p == 'read') ? true : false,
|
||||
write: _.find(this.user.permissions, p => p == 'write') ? true : false,
|
||||
upload: _.find(this.user.permissions, p => p == 'upload') ? true : false,
|
||||
download: _.find(this.user.permissions, p => p == 'download') ? true : false,
|
||||
batchdownload: _.find(this.user.permissions, p => p == 'batchdownload') ? true : false,
|
||||
zip: _.find(this.user.permissions, p => p == 'zip') ? true : false,
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
'permissions.read' (val) {
|
||||
if (!val) {
|
||||
this.permissions.write = false
|
||||
this.permissions.batchdownload = false
|
||||
this.permissions.zip = false
|
||||
}
|
||||
},
|
||||
'permissions.write' (val) {
|
||||
if (val) {
|
||||
this.permissions.read = true
|
||||
} else {
|
||||
this.permissions.zip = false
|
||||
}
|
||||
},
|
||||
'permissions.download' (val) {
|
||||
if (!val) {
|
||||
this.permissions.batchdownload = false
|
||||
}
|
||||
},
|
||||
'permissions.batchdownload' (val) {
|
||||
if (val) {
|
||||
this.permissions.read = true
|
||||
this.permissions.download = true
|
||||
}
|
||||
},
|
||||
'permissions.zip' (val) {
|
||||
if (val) {
|
||||
this.permissions.read = true
|
||||
this.permissions.write = true
|
||||
}
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
selectDir() {
|
||||
this.formErrors.homedir = ''
|
||||
|
||||
this.$modal.open({
|
||||
parent: this,
|
||||
hasModalCard: true,
|
||||
component: Tree,
|
||||
events: {
|
||||
selected: dir => {
|
||||
this.formFields.homedir = dir.path
|
||||
}
|
||||
},
|
||||
})
|
||||
},
|
||||
getPermissionsArray() {
|
||||
return _.reduce(this.permissions, (result, value, key) => {
|
||||
if (value == true) {
|
||||
result.push(key)
|
||||
}
|
||||
return result
|
||||
}, [])
|
||||
},
|
||||
confirmSave() {
|
||||
|
||||
if (this.formFields.role == 'guest' && this.getPermissionsArray().length) {
|
||||
this.$dialog.confirm({
|
||||
message: this.lang('Are you sure you want to allow access to everyone?'),
|
||||
type: 'is-danger',
|
||||
cancelText: this.lang('Cancel'),
|
||||
confirmText: this.lang('Confirm'),
|
||||
onConfirm: () => {
|
||||
this.save()
|
||||
}
|
||||
})
|
||||
} else {
|
||||
this.save()
|
||||
}
|
||||
},
|
||||
save() {
|
||||
|
||||
let method = this.action == 'add' ? api.storeUser : api.updateUser
|
||||
|
||||
method({
|
||||
key: this.user.username,
|
||||
role: this.formFields.role,
|
||||
name: this.formFields.name,
|
||||
username: this.formFields.username,
|
||||
homedir: this.formFields.homedir,
|
||||
password: this.formFields.password,
|
||||
permissions: this.getPermissionsArray(),
|
||||
})
|
||||
.then(res => {
|
||||
this.$toast.open({
|
||||
message: this.lang('Updated'),
|
||||
type: 'is-success',
|
||||
})
|
||||
this.$emit('updated', res)
|
||||
this.$parent.close()
|
||||
})
|
||||
.catch(errors => {
|
||||
if (typeof errors.response.data.data != 'object') {
|
||||
this.handleError(errors)
|
||||
}
|
||||
_.forEach(errors.response.data, err => {
|
||||
_.forEach(err, (val, key) => {
|
||||
this.formErrors[key] = this.lang(val)
|
||||
this.$forceUpdate()
|
||||
})
|
||||
})
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
Reference in New Issue
Block a user