From 23166925b882e26eea18dfe7c0d67452a65ce7fe Mon Sep 17 00:00:00 2001 From: rijkvanzanten Date: Wed, 21 Oct 2020 19:26:02 +0200 Subject: [PATCH] Only show user invite button if user can create users --- .../settings/routes/roles/item/item.vue | 4 ++- app/src/modules/users/routes/collection.vue | 29 +++++++++++++++++-- .../components/users-invite/users-invite.vue | 2 +- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/app/src/modules/settings/routes/roles/item/item.vue b/app/src/modules/settings/routes/roles/item/item.vue index 79226e8910..fd7161f136 100644 --- a/app/src/modules/settings/routes/roles/item/item.vue +++ b/app/src/modules/settings/routes/roles/item/item.vue @@ -91,10 +91,11 @@ import SettingsNavigation from '../../../components/navigation.vue'; import router from '@/router'; import RevisionsDrawerDetail from '@/views/private/components/revisions-drawer-detail'; import useItem from '@/composables/use-item'; -import { useUserStore } from '@/stores/'; +import { useUserStore, usePermissionsStore } from '@/stores/'; import RoleInfoSidebarDetail from './components/role-info-sidebar-detail.vue'; import PermissionsOverview from './components/permissions-overview.vue'; import UsersInvite from '@/views/private/components/users-invite'; +import usersCreate from '../../../../../../../api/dist/cli/commands/users/create'; type Values = { [field: string]: any; @@ -115,6 +116,7 @@ export default defineComponent({ }, setup(props) { const userStore = useUserStore(); + const permissionsStore = usePermissionsStore(); const userInviteModalActive = ref(false); const { primaryKey } = toRefs(props); diff --git a/app/src/modules/users/routes/collection.vue b/app/src/modules/users/routes/collection.vue index 6581bd2f81..d6b551237d 100644 --- a/app/src/modules/users/routes/collection.vue +++ b/app/src/modules/users/routes/collection.vue @@ -49,7 +49,13 @@ - + @@ -62,7 +68,7 @@ - + (null); const userInviteModalActive = ref(false); + const userStore = useUserStore(); + const permissionsStore = usePermissionsStore(); const selection = ref([]); @@ -165,7 +174,23 @@ export default defineComponent({ return filters.value; }); + const canInviteUsers = computed(() => { + const isAdmin = !!userStore.state.currentUser.role.admin_access; + + if (isAdmin) return true; + + const usersCreatePermission = permissionsStore.state.permissions.find( + (permission) => permission.collection === 'directus_users' && permission.action === 'create' + ); + const rolesReadPermission = permissionsStore.state.permissions.find( + (permission) => permission.collection === 'directus_roles' && permission.action === 'read' + ); + + return !!usersCreatePermission && !!rolesReadPermission; + }); + return { + canInviteUsers, _filters, addNewLink, batchDelete, diff --git a/app/src/views/private/components/users-invite/users-invite.vue b/app/src/views/private/components/users-invite/users-invite.vue index 49ba55fcbd..a3a35c5909 100644 --- a/app/src/views/private/components/users-invite/users-invite.vue +++ b/app/src/views/private/components/users-invite/users-invite.vue @@ -106,7 +106,7 @@ export default defineComponent({ }); -