Disabled various buttons when the user doesn't have edit permission

This commit is contained in:
Thaum Rystra
2020-05-21 12:47:02 +02:00
parent 47aad6d186
commit 13a0d66433
10 changed files with 303 additions and 189 deletions

View File

@@ -5,6 +5,7 @@
:value="model.name"
:error-messages="errors.name"
:debounce-time="debounceTime"
:disabled="disabled"
@change="(value, ack) => $emit('change', {path: ['name'], value, ack})"
/>
<text-field
@@ -12,6 +13,7 @@
:value="model.alignment"
:error-messages="errors.alignment"
:debounce-time="debounceTime"
:disabled="disabled"
@change="(value, ack) => $emit('change', {path: ['alignment'], value, ack})"
/>
<text-field
@@ -19,6 +21,7 @@
:value="model.gender"
:error-messages="errors.gender"
:debounce-time="debounceTime"
:disabled="disabled"
@change="(value, ack) => $emit('change', {path: ['gender'], value, ack})"
/>
<text-field
@@ -27,6 +30,7 @@
:value="model.picture"
:error-messages="errors.picture"
:debounce-time="debounceTime"
:disabled="disabled"
@change="(value, ack) => $emit('change', {path: ['picture'], value, ack})"
/>
<text-field
@@ -35,6 +39,7 @@
:value="model.avatarPicture"
:error-messages="errors.avatarPicture"
:debounce-time="debounceTime"
:disabled="disabled"
@change="(value, ack) => $emit('change', {path: ['avatarPicture'], value, ack})"
/>
<!--
@@ -44,18 +49,21 @@
label="Use variant encumbrance"
:input-value="model.settings.useVariantEncumbrance"
:error-messages="errors.useVariantEncumbrance"
:disabled="disabled"
@change="value => $emit('change', {path: ['settings','useVariantEncumbrance'], value})"
/>
<v-switch
label="Hide spells tab"
:input-value="model.settings.hideSpellcasting"
:error-messages="errors.hideSpellcasting"
:disabled="disabled"
@change="value => $emit('change', {path: ['settings','hideSpellcasting'], value})"
/>
<v-switch
label="Swap ability scores and modifiers"
:input-value="model.settings.swapStatAndModifier"
:error-messages="errors.swapStatAndModifier"
:disabled="disabled"
@change="value => $emit('change', {path: ['settings','swapStatAndModifier'], value})"
/>
</form-section>
@@ -88,6 +96,7 @@ export default {
type: Boolean,
},
debounceTime: Number,
disabled: Boolean,
},
};
</script>

View File

@@ -6,6 +6,7 @@
<div>
<creature-form
:model="model"
:disabled="editPermission === false"
@change="change"
/>
</div>
@@ -25,6 +26,7 @@ import Creatures from '/imports/api/creature/Creatures.js';
import {updateCreature} from '/imports/api/creature/Creatures.js';
import DialogBase from '/imports/ui/dialogStack/DialogBase.vue';
import CreatureForm from '/imports/ui/creature/CreatureForm.vue'
import { assertEditPermission } from '/imports/api/creature/creaturePermissions.js';
export default {
components: {
@@ -39,6 +41,14 @@ export default {
model(){
return Creatures.findOne(this._id);
},
editPermission(){
try {
assertEditPermission(this.model, Meteor.userId());
return true;
} catch (e) {
return false;
}
},
},
methods: {
change({path, value, ack}){

View File

@@ -48,17 +48,13 @@
//TODO add a "no character found" screen if shown on a false address
// or on a character the user does not have permission to view
import Creatures from '/imports/api/creature/Creatures.js';
import removeCreature from '/imports/api/creature/removeCreature.js';
import isDarkColor from '/imports/ui/utility/isDarkColor.js';
import { mapMutations } from 'vuex';
import { theme } from '/imports/ui/theme.js';
import StatsTab from '/imports/ui/creature/character/characterSheetTabs/StatsTab.vue';
import FeaturesTab from '/imports/ui/creature/character/characterSheetTabs/FeaturesTab.vue';
import InventoryTab from '/imports/ui/creature/character/characterSheetTabs/InventoryTab.vue';
import SpellsTab from '/imports/ui/creature/character/characterSheetTabs/SpellsTab.vue';
import PersonaTab from '/imports/ui/creature/character/characterSheetTabs/PersonaTab.vue';
import TreeTab from '/imports/ui/creature/character/characterSheetTabs/TreeTab.vue';
import { recomputeCreature } from '/imports/api/creature/computation/recomputeCreature.js';
import { assertEditPermission } from '/imports/api/creature/creaturePermissions.js';
export default {
components: {
@@ -81,7 +77,7 @@
},
reactiveProvide: {
name: 'context',
include: ['creature'],
include: ['creature', 'editPermission'],
},
onMounted(){
this.$store.commit('setPageTitle', this.creature && this.creature.name || 'Character Sheet');
@@ -100,6 +96,14 @@
creature(){
return Creatures.findOne(this.creatureId) || {};
},
editPermission(){
try {
assertEditPermission(this.creature, Meteor.userId());
return true;
} catch (e) {
return false;
}
},
},
}
</script>

View File

@@ -5,6 +5,7 @@
<toolbar-card color="">
<v-spacer slot="toolbar" />
<v-switch
v-if="context.editPermission !== false"
slot="toolbar"
v-model="organize"
label="Organize"
@@ -53,6 +54,9 @@ export default {
ContainerCard,
ToolbarCard,
},
inject: {
context: { default: {} }
},
props: {
creatureId: String,
},

View File

@@ -5,6 +5,7 @@
<v-card>
<v-card-text>
<v-switch
v-if="context.editPermission !== false"
v-model="organize"
label="Organize"
class="justify-end"
@@ -48,6 +49,9 @@ export default {
CreaturePropertiesTree,
SpellListCard,
},
inject: {
context: { default: {} }
},
props: {
creatureId: {
type: String,

View File

@@ -21,6 +21,7 @@
>
<v-spacer />
<v-switch
v-if="context.editPermission !== false"
v-model="organize"
label="Organize"
class="mx-3"
@@ -153,6 +154,9 @@
PropertyIcon,
LabeledFab,
},
inject: {
context: { default: {} }
},
props: {
creatureId: {
type: String,