From 8ad92bdcfcaf93632babe86775993fefcbf5759a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timoth=C3=A9e=20Poussard?= <tpoussard@neogeo.fr>
Date: Fri, 21 Jan 2022 17:43:16 +0100
Subject: [PATCH] allow super contrib & moderator to modify published status &
 forbid them to delete others features

---
 src/components/feature/FeatureListTable.vue | 31 ++++++++-------------
 1 file changed, 12 insertions(+), 19 deletions(-)

diff --git a/src/components/feature/FeatureListTable.vue b/src/components/feature/FeatureListTable.vue
index 53edfe56..e7e996ff 100644
--- a/src/components/feature/FeatureListTable.vue
+++ b/src/components/feature/FeatureListTable.vue
@@ -343,6 +343,10 @@ export default {
     ...mapState(['user', 'USER_LEVEL_PROJECTS']),
     ...mapState('projects', ['project']),
 
+    userStatus() {
+      return this.USER_LEVEL_PROJECTS[this.project.slug];
+    },
+
     checked: {
       get() {
         return this.checkedFeatures;
@@ -401,35 +405,24 @@ export default {
     },
 
     canDeleteFeature(feature) {
-      const userStatus = this.USER_LEVEL_PROJECTS[this.project.slug];
-      console.log(this.user.username);
-      console.log(feature.properties.creator.username);
-      if (feature.properties.creator.username === this.user.username) {
-        console.log(userStatus);
-        console.log(userStatus === 'Super Contributeur');
-      }
-      if ((userStatus === 'Super Contributeur' || userStatus === 'Modérateur') &&
-        feature.properties.creator.username !== this.user.username) {
-        return false;
-      }
-      return feature.properties.creator.username !== this.user.username &&
-                  !this.user.is_superuser &&
-                  !this.permissions.is_project_administrator;
+      if (this.userStatus === 'Administrateur projet') return true; //* can delete all
+      //* others can delete only their own features
+      return feature.properties.creator.username === this.user.username;
+
     },
 
     canEditFeature(feature) {
-      const userStatus = this.USER_LEVEL_PROJECTS[this.project.slug];
       const permissions = {
         'Administrateur projet' : ['draft', 'published', 'archived'],
         Modérateur : ['pending', 'published'],
         'Super Contributeur' : ['draft', 'pending', 'published'],
-        Contributeur : ['draft', this.project.moderation ? 'pending' : 'published'],
+        Contributeur : ['draft', 'pending', 'published'],
       };
 
-      if (userStatus === 'Contributeur' && feature.properties.creator.username !== this.user.username) {
+      if (this.userStatus === 'Contributeur' && feature.properties.creator.username !== this.user.username) {
         return false;
-      } else if (permissions[userStatus]) {
-        return permissions[userStatus].includes(feature.properties.status.value);
+      } else if (permissions[this.userStatus]) {
+        return permissions[this.userStatus].includes(feature.properties.status.value);
       } else {
         return false;
       }
-- 
GitLab