From 34de59da3411fd418896946f6a6079d2e6525e58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e?= <tpoussard@neogeo.fr> Date: Fri, 8 Jul 2022 17:44:13 +0200 Subject: [PATCH] restrict fast editions to superior roles & send feature edition for custom forms --- src/components/Feature/Detail/FeatureHeader.vue | 11 +++++++++-- src/store/modules/feature.store.js | 15 ++++++++------- src/store/modules/projects.store.js | 1 + 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/components/Feature/Detail/FeatureHeader.vue b/src/components/Feature/Detail/FeatureHeader.vue index 0da226c0..c4472199 100644 --- a/src/components/Feature/Detail/FeatureHeader.vue +++ b/src/components/Feature/Detail/FeatureHeader.vue @@ -56,7 +56,7 @@ </button> <button - v-if="fastEditionMode" + v-if="fastEditionMode && userCanFastEdit" id="previous-feature" :class="['ui button button-hover-orange tiny-margin', { disabled: false }]" data-tooltip="Enregistrer les modifications" @@ -192,6 +192,13 @@ export default { return this.USER_LEVEL_PROJECTS && this.USER_LEVEL_PROJECTS[this.$route.params.slug] === 'Modérateur'; }, + userCanFastEdit() { + const superiorRoles = ['contributor', 'super_contributor', 'moderator', 'admin']; + return this.USER_LEVEL_PROJECTS && + superiorRoles.includes(this.USER_LEVEL_PROJECTS[this.$route.params.slug]) || + this.user.is_superuser; + }, + queryparams() { return this.$route.query.offset >= 0 ? { previous: parseInt(this.$route.query.offset) - 1, @@ -214,7 +221,7 @@ export default { }); }, saveFastEdition() { - this.$store.dispatch('feature/SEND_FEATURE', this.currentRouteName) + this.$store.dispatch('feature/SEND_FEATURE', this.$route.name) .then(() => console.log('sent')); } } diff --git a/src/store/modules/feature.store.js b/src/store/modules/feature.store.js index ec5b373b..743d9e8c 100644 --- a/src/store/modules/feature.store.js +++ b/src/store/modules/feature.store.js @@ -209,14 +209,15 @@ const feature = { for (const field of state.extra_forms) { extraFormObject[field.name] = field.value; } + const feature = state.form || state.currentFeature; return { - id: state.form.feature_id, + id: feature.feature_id, type: 'Feature', - geometry: state.form.geometry, + geometry: feature.geometry || feature.geom, properties: { - title: state.form.title, - description: state.form.description.value, - status: state.form.status.value, + title: feature.title, + description: feature.description.value, + status: feature.status.value, project: rootState.projects.project.slug, feature_type: rootState['feature-type'].current_feature_type_slug, ...extraFormObject @@ -227,7 +228,7 @@ const feature = { const geojson = createGeojson(); let url = `${rootState.configuration.VUE_APP_DJANGO_API_BASE}features/`; if (routeName !== 'ajouter-signalement') { - url += `${state.form.feature_id}/? + url += `${geojson.id}/? feature_type__slug=${rootState['feature-type'].current_feature_type_slug} &project__slug=${rootState.projects.project.slug}`; } @@ -260,7 +261,7 @@ const feature = { const updateMsg = { project: rootState.projects.project.slug, type: routeName === 'ajouter-signalement' ? 'post' : 'put', - featureId: state.form.feature_id, + featureId: geojson.id, geojson: geojson }; arraysOffline.push(updateMsg); diff --git a/src/store/modules/projects.store.js b/src/store/modules/projects.store.js index 969f79b2..14266f6d 100644 --- a/src/store/modules/projects.store.js +++ b/src/store/modules/projects.store.js @@ -67,6 +67,7 @@ const projectsStore = { actions: { async GET_ALL_PROJECTS({ rootState, commit }) { + console.trace('GET_ALL_PROJECTS'); try { const response = await axios .get(`${rootState.configuration.VUE_APP_DJANGO_API_BASE}projects/`); -- GitLab