Use correct permissions in drawer-item

Fixes #3811
This commit is contained in:
rijkvanzanten
2021-01-28 16:48:51 -05:00
parent 5632bd0ea7
commit e547a72693
3 changed files with 45 additions and 33 deletions

View File

@@ -37,33 +37,41 @@ export function usePermissions(collection: Ref<string>, item: Ref<any>, isNew: R
});
const fields = computed(() => {
if (userStore.state.currentUser?.role?.admin_access === true) return rawFields.value;
let fields = cloneDeep(rawFields.value);
if (userStore.state.currentUser?.role?.admin_access === true) return fields;
const permissions = permissionsStore.getPermissionsForUser(collection.value, isNew.value ? 'create' : 'update');
if (!permissions) return rawFields.value;
if (!permissions) return fields;
if (permissions?.fields?.includes('*') === true) return rawFields.value;
if (permissions?.fields?.includes('*') === false) {
fields = fields.map((field: Field) => {
if (permissions.fields.includes(field.field) === false) {
field.meta = {
...(field.meta || {}),
readonly: true,
} as any;
}
return rawFields.value.map((field: Field) => {
field = cloneDeep(field);
return field;
});
}
if (permissions.fields.includes(field.field) === false) {
field.meta = {
...(field.meta || {}),
readonly: true,
} as any;
}
if (permissions?.presets) {
fields = fields.map((field: Field) => {
if (field.field in permissions.presets) {
field.schema = {
...(field.schema || {}),
default_value: permissions.presets[field.field],
} as any;
}
if (permissions.presets && field.field in permissions.presets) {
field.schema = {
...(field.schema || {}),
default_value: permissions.presets[field.field],
} as any;
}
return field;
});
}
return field;
});
return fields;
});
return { deleteAllowed, saveAllowed, archiveAllowed, updateAllowed, fields };

View File

@@ -57,12 +57,7 @@
</template>
<template #actions>
<v-dialog
v-if="!isNew"
v-model="confirmDelete"
:disabled="deleteAllowed === false"
@esc="confirmDelete = false"
>
<v-dialog v-if="!isNew" v-model="confirmDelete" :disabled="deleteAllowed === false" @esc="confirmDelete = false">
<template #activator="{ on }">
<v-button
rounded

View File

@@ -11,22 +11,16 @@
<v-form
:loading="loading"
:initial-values="item && item[junctionField]"
:collection="junctionRelatedCollection"
:primary-key="relatedPrimaryKey"
:edits="_edits[junctionField]"
:fields="junctionRelatedCollectionFields"
@input="setJunctionEdits"
/>
<v-divider v-if="showDivider" />
</template>
<v-form
:loading="loading"
:initial-values="item"
:collection="collection"
:primary-key="primaryKey"
v-model="_edits"
/>
<v-form :loading="loading" :initial-values="item" :primary-key="primaryKey" :fields="fields" v-model="_edits" />
</div>
</v-drawer>
</template>
@@ -40,6 +34,7 @@ import { useFieldsStore, useRelationsStore } from '../../../../stores';
import i18n from '../../../../lang';
import { Relation, Field } from '../../../../types';
import { unexpectedError } from '../../../../utils/unexpected-error';
import { usePermissions } from '../../../../composables/use-permissions';
export default defineComponent({
model: {
@@ -111,6 +106,18 @@ export default defineComponent({
);
});
const { fields: junctionRelatedCollectionFields } = usePermissions(
junctionRelatedCollection,
computed(() => item.value && item.value[props.junctionField]),
computed(() => props.primaryKey === '+')
);
const { fields } = usePermissions(
collection,
item,
computed(() => props.primaryKey === '+')
);
return {
_active,
_edits,
@@ -123,6 +130,8 @@ export default defineComponent({
junctionRelatedCollection,
setJunctionEdits,
showDivider,
junctionRelatedCollectionFields,
fields,
};
function useActiveState() {