Fix revisions permissions check for admin users

Fixes #4114
This commit is contained in:
rijkvanzanten
2021-02-17 10:32:49 -05:00
parent 06cd0bdbe2
commit 07ea3870ba
4 changed files with 22 additions and 37 deletions

View File

@@ -74,5 +74,12 @@ export function usePermissions(collection: Ref<string>, item: Ref<any>, isNew: R
return fields;
});
return { deleteAllowed, saveAllowed, archiveAllowed, updateAllowed, fields };
const revisionsAllowed = computed(() => {
if (userStore.state.currentUser?.role?.admin_access === true) return true;
return !!permissionsStore.state.permissions.find(
(permission) => permission.collection === 'directus_revisions' && permission.action === 'read'
);
});
return { deleteAllowed, saveAllowed, archiveAllowed, updateAllowed, fields, revisionsAllowed };
}

View File

@@ -174,7 +174,7 @@
<div class="page-description" v-html="marked($t('page_help_collections_item'))" />
</sidebar-detail>
<revisions-drawer-detail
v-if="isNew === false && _primaryKey && hasRevisionsPermissions"
v-if="isNew === false && _primaryKey && revisionsAllowed"
:collection="collection"
:primary-key="_primaryKey"
ref="revisionsDrawerDetail"
@@ -205,7 +205,6 @@ import i18n from '@/lang';
import marked from 'marked';
import useShortcut from '@/composables/use-shortcut';
import { NavigationGuard } from 'vue-router';
import { usePermissionsStore } from '@/stores';
import { usePermissions } from '@/composables/use-permissions';
export default defineComponent({
@@ -233,13 +232,6 @@ export default defineComponent({
},
setup(props) {
const form = ref<HTMLElement>();
const permissionsStore = usePermissionsStore();
const hasRevisionsPermissions = computed(() => {
return !!permissionsStore.state.permissions.find(
(permission) => permission.collection === 'directus_revisions' && permission.action === 'read'
);
});
const { collection, primaryKey } = toRefs(props);
const { breadcrumb } = useBreadcrumb();
@@ -324,7 +316,7 @@ export default defineComponent({
return next();
};
const { deleteAllowed, archiveAllowed, saveAllowed, updateAllowed, fields } = usePermissions(
const { deleteAllowed, archiveAllowed, saveAllowed, updateAllowed, fields, revisionsAllowed } = usePermissions(
collection,
item,
isNew
@@ -379,7 +371,7 @@ export default defineComponent({
fields,
isSingleton,
_primaryKey,
hasRevisionsPermissions,
revisionsAllowed,
};
function useBreadcrumb() {

View File

@@ -157,7 +157,7 @@
<template #sidebar>
<file-info-sidebar-detail :file="item" />
<revisions-drawer-detail
v-if="isBatch === false && isNew === false && hasRevisionsPermissions"
v-if="isBatch === false && isNew === false && revisionsAllowed"
collection="directus_files"
:primary-key="primaryKey"
ref="revisionsDrawerDetail"
@@ -195,7 +195,6 @@ import ReplaceFile from '../components/replace-file.vue';
import { usePermissions } from '@/composables/use-permissions';
import { notify } from '@/utils/notify';
import { unexpectedError } from '@/utils/unexpected-error';
import { usePermissionsStore } from '@/stores';
export default defineComponent({
name: 'files-item',
@@ -235,14 +234,6 @@ export default defineComponent({
const { breadcrumb } = useBreadcrumb();
const replaceFileDialogActive = ref(false);
const permissionsStore = usePermissionsStore();
const hasRevisionsPermissions = computed(() => {
return !!permissionsStore.state.permissions.find(
(permission) => permission.collection === 'directus_revisions' && permission.action === 'read'
);
});
const revisionsDrawerDetail = ref<Vue | null>(null);
const {
@@ -302,7 +293,11 @@ export default defineComponent({
useShortcut('meta+s', saveAndStay, form);
const { deleteAllowed, saveAllowed, updateAllowed, fields } = usePermissions(ref('directus_files'), item, isNew);
const { deleteAllowed, saveAllowed, updateAllowed, fields, revisionsAllowed } = usePermissions(
ref('directus_files'),
item,
isNew
);
const fieldsFiltered = computed(() => {
return fields.value.filter((field: Field) => fieldsDenyList.includes(field.field) === false);
@@ -344,7 +339,7 @@ export default defineComponent({
updateAllowed,
fields,
fieldsFiltered,
hasRevisionsPermissions,
revisionsAllowed,
};
function useBreadcrumb() {

View File

@@ -151,7 +151,7 @@
<template #sidebar>
<user-info-sidebar-detail :is-new="isNew" :user="item" />
<revisions-drawer-detail
v-if="isBatch === false && isNew === false && hasRevisionsPermissions"
v-if="isBatch === false && isNew === false && revisionsAllowed"
collection="directus_users"
:primary-key="primaryKey"
ref="revisionsDrawerDetail"
@@ -176,7 +176,7 @@ import CommentsSidebarDetail from '@/views/private/components/comments-sidebar-d
import useItem from '@/composables/use-item';
import SaveOptions from '@/views/private/components/save-options';
import api from '@/api';
import { useFieldsStore, useCollectionsStore, useUserStore } from '@/stores/';
import { useFieldsStore, useCollectionsStore } from '@/stores/';
import useFormFields from '@/composables/use-form-fields';
import { Field } from '@/types';
import UserInfoSidebarDetail from '../components/user-info-sidebar-detail.vue';
@@ -187,7 +187,6 @@ import { userName } from '@/utils/user-name';
import { usePermissions } from '@/composables/use-permissions';
import { unexpectedError } from '@/utils/unexpected-error';
import { addTokenToURL } from '@/api';
import { usePermissionsStore } from '@/stores';
export default defineComponent({
name: 'users-item',
@@ -218,14 +217,6 @@ export default defineComponent({
const form = ref<HTMLElement>();
const fieldsStore = useFieldsStore();
const collectionsStore = useCollectionsStore();
const userStore = useUserStore();
const permissionsStore = usePermissionsStore();
const hasRevisionsPermissions = computed(() => {
return !!permissionsStore.state.permissions.find(
(permission) => permission.collection === 'directus_revisions' && permission.action === 'read'
);
});
const { primaryKey } = toRefs(props);
const { breadcrumb } = useBreadcrumb();
@@ -299,7 +290,7 @@ export default defineComponent({
const { formFields } = useFormFields(fieldsFiltered);
const { deleteAllowed, archiveAllowed, saveAllowed, updateAllowed } = usePermissions(
const { deleteAllowed, archiveAllowed, saveAllowed, updateAllowed, revisionsAllowed } = usePermissions(
ref('directus_users'),
item,
isNew
@@ -351,7 +342,7 @@ export default defineComponent({
archiveTooltip,
form,
userName,
hasRevisionsPermissions,
revisionsAllowed,
};
function useBreadcrumb() {