From bf58256bef3bf2e72aa671f6a218514d6c424cfe Mon Sep 17 00:00:00 2001
From: florent <flavelle@neogeo.fr>
Date: Tue, 2 Aug 2022 12:21:35 +0200
Subject: [PATCH] some fixes on permissions

---
 src/components/Feature/Detail/FeatureHeader.vue |  6 +++++-
 .../FeaturesListAndMap/FeatureListTable.vue     |  4 +++-
 src/views/Feature/FeatureDetail.vue             | 17 ++++++++++++++++-
 3 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/src/components/Feature/Detail/FeatureHeader.vue b/src/components/Feature/Detail/FeatureHeader.vue
index 7616506c..c90be13b 100644
--- a/src/components/Feature/Detail/FeatureHeader.vue
+++ b/src/components/Feature/Detail/FeatureHeader.vue
@@ -127,7 +127,7 @@
           </router-link>
 
           <a
-            v-if="((permissions && permissions.can_update_feature) || isFeatureCreator) && isOnline"
+            v-if="canDeleteFeature && isOnline"
             id="currentFeature-delete"
             class="ui button button-hover-red tiny-margin"
             data-tooltip="Supprimer le signalement"
@@ -200,6 +200,10 @@ export default {
       type: Boolean,
       default: false,
     },
+    canDeleteFeature: {
+      type: Boolean,
+      default: false,
+    },
   },
 
   computed: {
diff --git a/src/components/Project/FeaturesListAndMap/FeatureListTable.vue b/src/components/Project/FeaturesListAndMap/FeatureListTable.vue
index fff79a99..775c08b1 100644
--- a/src/components/Project/FeaturesListAndMap/FeatureListTable.vue
+++ b/src/components/Project/FeaturesListAndMap/FeatureListTable.vue
@@ -465,7 +465,9 @@ export default {
         Contributeur : ['draft', 'pending', 'published'],
       };
 
-      if (this.userStatus === 'Contributeur' && feature.display_creator !== this.user.username) {
+      if (this.user.is_superuser) {
+        return true;
+      } else if (this.userStatus === 'Contributeur' && feature.display_creator !== `${this.user.first_name} ${this.user.last_name}`) {
         return false;
       } else if (permissions[this.userStatus]) {
         return permissions[this.userStatus].includes(feature.status);
diff --git a/src/views/Feature/FeatureDetail.vue b/src/views/Feature/FeatureDetail.vue
index aead61e1..196ac2ae 100644
--- a/src/views/Feature/FeatureDetail.vue
+++ b/src/views/Feature/FeatureDetail.vue
@@ -15,6 +15,7 @@
             :display-to-list-button="displayToListButton"
             :is-feature-creator="isFeatureCreator"
             :can-edit-feature="canEditFeature"
+            :can-delete-feature="canDeleteFeature"
             @setIsDeleting="isDeleting = true"
             @tofeature="pushNgo"
           />
@@ -242,6 +243,7 @@ export default {
   computed: {
     ...mapState([
       'USER_LEVEL_PROJECTS',
+      'user'
     ]),
     ...mapState('projects', [
       'project'
@@ -282,10 +284,23 @@ export default {
       return this.USER_LEVEL_PROJECTS && this.USER_LEVEL_PROJECTS[this.$route.params.slug] === 'Modérateur';
     },
 
+    isAdministrator() {
+      return this.USER_LEVEL_PROJECTS && this.USER_LEVEL_PROJECTS[this.$route.params.slug] === 'Administrateur projet';
+    },
+
     canEditFeature() {
       return (this.permissions && this.permissions.can_update_feature) ||
                 this.isFeatureCreator ||
-                this.isModerator;
+                this.isModerator ||
+                this.user.is_superuser;
+    },
+
+    canDeleteFeature() {
+      return (this.permissions && this.permissions.can_delete_feature && this.isFeatureCreator) ||
+                this.isFeatureCreator ||
+                this.isModerator ||
+                this.isAdministrator ||
+                this.user.is_superuser;
     }
   },
 
-- 
GitLab