From 9e3ad304572b4bf84a1895e004ba4bb28e37f8df Mon Sep 17 00:00:00 2001 From: rijkvanzanten Date: Mon, 12 Oct 2020 18:36:28 -0400 Subject: [PATCH] Make sure collection meta exists before setting permission Fixes #523 --- api/src/services/permissions.ts | 2 +- app/src/modules/settings/index.ts | 9 +++++++++ .../components/permissions-overview-toggle.vue | 16 ++++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/api/src/services/permissions.ts b/api/src/services/permissions.ts index 8440678898..75c65d968b 100644 --- a/api/src/services/permissions.ts +++ b/api/src/services/permissions.ts @@ -1,4 +1,4 @@ -import { AbstractServiceOptions, PermissionsAction } from '../types'; +import { AbstractServiceOptions, PermissionsAction, Item, PrimaryKey } from '../types'; import { ItemsService } from '../services/items'; export class PermissionsService extends ItemsService { diff --git a/app/src/modules/settings/index.ts b/app/src/modules/settings/index.ts index 285f9eb340..02a3d45815 100644 --- a/app/src/modules/settings/index.ts +++ b/app/src/modules/settings/index.ts @@ -17,6 +17,7 @@ import SettingsNotFound from './routes/not-found.vue'; import api from '@/api'; import { useCollection } from '@/composables/use-collection'; import { ref } from '@vue/composition-api'; +import { useCollectionsStore, useFieldsStore } from '@/stores'; export default defineModule(({ i18n }) => ({ id: 'settings', @@ -37,6 +38,11 @@ export default defineModule(({ i18n }) => ({ name: 'settings-collections', path: '/data-model', component: SettingsCollections, + beforeEnter(to, from, next) { + const collectionsStore = useCollectionsStore(); + collectionsStore.hydrate(); + next(); + }, children: [ { path: '+', @@ -53,11 +59,14 @@ export default defineModule(({ i18n }) => ({ component: SettingsFields, async beforeEnter(to, from, next) { const { info } = useCollection(ref(to.params.collection)); + const fieldsStore = useFieldsStore(); if (!info.value?.meta) { await api.patch(`/collections/${to.params.collection}`, { meta: {} }); } + fieldsStore.hydrate(); + next(); }, props: (route) => ({ diff --git a/app/src/modules/settings/routes/roles/detail/components/permissions-overview-toggle.vue b/app/src/modules/settings/routes/roles/detail/components/permissions-overview-toggle.vue index adb532c496..c82169cea2 100644 --- a/app/src/modules/settings/routes/roles/detail/components/permissions-overview-toggle.vue +++ b/app/src/modules/settings/routes/roles/detail/components/permissions-overview-toggle.vue @@ -102,6 +102,14 @@ export default defineComponent({ async function setFullAccess() { saving.value = true; + // If this collection isn't "managed" yet, make sure to add it to directus_collections first + // before trying to associate any permissions with it + if (props.collection.meta === null) { + await api.patch(`/collections/${props.collection.collection}`, { + meta: {}, + }); + } + if (props.permission) { try { await api.patch(`/permissions/${props.permission.id}`, { @@ -148,6 +156,14 @@ export default defineComponent({ } async function openPermissions() { + // If this collection isn't "managed" yet, make sure to add it to directus_collections first + // before trying to associate any permissions with it + if (props.collection.meta === null) { + await api.patch(`/collections/${props.collection.collection}`, { + meta: {}, + }); + } + if (props.permission) { router.push(`/settings/roles/${props.role || 'public'}/${props.permission.id}`); } else {