Save app required/recommended permissions on role create

This commit is contained in:
rijkvanzanten
2020-09-15 16:12:20 -04:00
parent d141f28fc1
commit 18bea60c6c
2 changed files with 174 additions and 3 deletions

View File

@@ -5,7 +5,21 @@
{{ $t('create_role') }}
</v-card-title>
<v-card-text>
<v-input v-model="roleName" autofocus @keyup.enter="save" :placeholder="$t('role_name') + '...'" />
<div class="form-grid">
<div class="field full">
<v-input v-model="roleName" autofocus @keyup.enter="save" :placeholder="$t('role_name') + '...'" />
</div>
<div class="field half">
<p class="type-label">{{ $t('fields.directus_roles.app_access') }}</p>
<v-checkbox block v-model="appAccess" :label="$t('enabled')" />
</div>
<div class="field half">
<p class="type-label">{{ $t('fields.directus_roles.admin') }}</p>
<v-checkbox block v-model="admin" :label="$t('enabled')" />
</div>
</div>
</v-card-text>
<v-card-actions>
<v-button to="/settings/roles" secondary>{{ $t('cancel') }}</v-button>
@@ -19,14 +33,17 @@
import { defineComponent, ref } from '@vue/composition-api';
import api from '@/api';
import router from '@/router';
import { permissions } from './app-required-permissions'
export default defineComponent({
setup() {
const roleName = ref<string>();
const appAccess = ref(true);
const admin = ref(false);
const { saving, error, save } = useSave();
return { roleName, saving, error, save };
return { roleName, saving, error, save, appAccess, admin };
function useSave() {
const saving = ref(false);
@@ -39,7 +56,15 @@ export default defineComponent({
error.value = null;
try {
const roleResponse = await api.post('/roles', { name: roleName.value });
const roleResponse = await api.post('/roles', { name: roleName.value, admin: admin.value, app_access: appAccess.value });
if (appAccess.value === true && admin.value === false) {
await api.post('/permissions', permissions.map(permission => ({
...permission,
role: roleResponse.data.data.id,
})));
}
router.push(`/settings/roles/${roleResponse.data.data.id}`);
} catch (err) {
error.value = err;
@@ -52,3 +77,17 @@ export default defineComponent({
});
</script>
<style lang="scss" scoped>
@import '@/styles/mixins/form-grid';
.form-grid {
--v-form-horizontal-gap: 12px;
--v-form-vertical-gap: 24px;
@include form-grid;
.type-label {
font-size: 1rem;
}
}
</style>

View File

@@ -0,0 +1,132 @@
import { Permission } from '@/types';
export const appRequiredPermissions: Partial<Permission>[] = [
{
collection: 'directus_activity',
action: 'read',
permissions: {},
fields: '*',
},
{
collection: 'directus_collections',
action: 'read',
permissions: {},
fields: '*',
},
{
collection: 'directus_fields',
action: 'read',
permissions: {},
fields: '*',
},
{
collection: 'directus_presets',
action: 'create',
permissions: {},
fields: '*',
},
{
collection: 'directus_presets',
action: 'read',
permissions: {},
fields: '*',
},
{
collection: 'directus_presets',
action: 'update',
permissions: {},
fields: '*',
},
{
collection: 'directus_presets',
action: 'delete',
permissions: {},
fields: '*',
},
{
collection: 'directus_relations',
action: 'read',
permissions: {},
fields: '*',
},
{
collection: 'directus_revisions',
action: 'read',
permissions: {},
fields: '*',
},
{
collection: 'directus_users',
action: 'read',
permissions: {},
fields: '*',
},
{
collection: 'directus_roles',
action: 'read',
permissions: {},
fields: '*',
},
{
collection: 'directus_settings',
action: 'read',
permissions: {},
fields: '*',
},
];
export const appRecommendedPermissions: Partial<Permission>[] = [
{
collection: 'directus_files',
action: 'create',
permissions: {},
fields: '*',
},
{
collection: 'directus_files',
action: 'read',
permissions: {},
fields: '*',
},
{
collection: 'directus_files',
action: 'update',
permissions: {},
fields: '*',
},
{
collection: 'directus_files',
action: 'delete',
permissions: {},
fields: '*',
},
{
collection: 'directus_folders',
action: 'create',
permissions: {},
fields: '*',
},
{
collection: 'directus_folders',
action: 'read',
permissions: {},
fields: '*',
},
{
collection: 'directus_folders',
action: 'update',
permissions: {},
fields: '*',
},
{
collection: 'directus_folders',
action: 'delete',
permissions: {},
fields: '*',
},
];
export const permissions = [
...appRequiredPermissions,
...appRecommendedPermissions,
]