mirror of
https://github.com/directus/directus.git
synced 2026-04-25 03:00:53 -04:00
@@ -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 };
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user