From 088a1a8f337fe0c89379b12abb7e42c5efccbe8a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timoth=C3=A9e=20Poussard?= <tpoussard@neogeo.fr>
Date: Mon, 27 Sep 2021 11:58:12 +0200
Subject: [PATCH] fix missing permissions in menu

---
 src/App.vue                           | 14 +++++++----
 src/store/index.js                    | 34 +++++++++++++++------------
 src/views/project/Project_detail.vue  |  8 ++++---
 src/views/project/Project_members.vue |  2 +-
 4 files changed, 35 insertions(+), 23 deletions(-)

diff --git a/src/App.vue b/src/App.vue
index a7d37ca6..af09408b 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -8,7 +8,7 @@
               class="ui mini right spaced image"
               src="@/assets/img/logo-neogeo-circle.png"
             />
-              <!-- :src="LOGO_PATH" -->
+            <!-- :src="LOGO_PATH" -->
             {{ getApplicationName() }}
           </router-link>
 
@@ -44,6 +44,7 @@
               </router-link>
 
               <router-link
+                v-if="user.is_administrator"
                 :to="{
                   name: 'project_mapping',
                   params: { slug: project.slug },
@@ -53,6 +54,7 @@
                 <i class="map icon"></i>Fonds cartographiques
               </router-link>
               <router-link
+                v-if="user.is_administrator"
                 :to="{
                   name: 'project_members',
                   params: { slug: project.slug },
@@ -61,7 +63,6 @@
               >
                 <i class="users icon"></i>Membres
               </router-link>
-              <!-- {% endif %} -->
             </div>
           </div>
 
@@ -128,7 +129,6 @@
 </template>
 
 <script>
-
 import frag from "vue-frag";
 import { mapState } from "vuex";
 import { mapGetters } from "vuex";
@@ -148,7 +148,13 @@ export default {
   },
 
   computed: {
-    ...mapState(["projects", "user", "SSO_SETTED", "USER_LEVEL_PROJECTS","configuration"]),
+    ...mapState([
+      "projects",
+      "user",
+      "SSO_SETTED",
+      "USER_LEVEL_PROJECTS",
+      "configuration",
+    ]),
     ...mapGetters(["project"]),
     //LOGO_PATH: () => require(`${configuration.VUE_APP_LOGO_PATH}`),
     //APPLICATION_NAME: () => this.configuration.VUE_APP_APPLICATION_NAME,
diff --git a/src/store/index.js b/src/store/index.js
index c06634cc..0efb5051 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -162,19 +162,21 @@ export default new Vuex.Store({
       }
     },
 
-    USER_INFO({ commit }) {
-      axios
-        .get(`${this.state.configuration.VUE_APP_DJANGO_API_BASE}user_info/`)
-        .then((response) => {
-          if (response && response.status === 200) {
-            const user = response.data.user;
-            commit("SET_USER", user);
-            window.localStorage.setItem("user", JSON.stringify(user)); //? toujours nécessaire ?
-          }
-        })
-        .catch(() => {
-          router.push({ name: "login" });
-        });
+    USER_INFO({ state, commit }) {
+      if (state.user) {
+        axios
+          .get(`${this.state.configuration.VUE_APP_DJANGO_API_BASE}user_info/`)
+          .then((response) => {
+            if (response && response.status === 200) {
+              const user = response.data.user;
+              commit("SET_USER", user);
+              window.localStorage.setItem("user", JSON.stringify(user)); //? toujours nécessaire ?
+            }
+          })
+          .catch(() => {
+            router.push({ name: "login" });
+          });
+      }
     },
 
     LOGOUT({ commit }) { // ? logout se fait bien dans django ?
@@ -185,6 +187,7 @@ export default new Vuex.Store({
             commit("SET_USER", false); // ? better false or null
             commit("SET_USER_LEVEL_PROJECTS", null);
             commit("SET_USER_PERMISSIONS", null);
+            router.push("/");
           }
         })
         .catch((error) => {
@@ -204,6 +207,7 @@ export default new Vuex.Store({
           throw error;
         });
     },
+
     GET_USER_LEVEL_PROJECTS({ commit }) {
       axios
         .get(`${this.state.configuration.VUE_APP_DJANGO_API_BASE}user-level-projects/`)
@@ -230,12 +234,12 @@ export default new Vuex.Store({
         });
     },
 
-    GET_PROJECT_INFO({ commit, dispatch }, slug) {
+    GET_PROJECT_INFO({ state, commit, dispatch }, slug) {
       commit("SET_PROJECT_SLUG", slug);
       dispatch("GET_PROJECT_LAST_MESSAGES", slug);
       dispatch("feature_type/GET_PROJECT_FEATURE_TYPES", slug);
       dispatch("feature/GET_PROJECT_FEATURES", slug);
-      dispatch("map/GET_BASEMAPS", slug);
+      if (state.user) dispatch("map/GET_BASEMAPS", slug);
     },
 
     GET_PROJECT_LAST_MESSAGES({ commit }, project_slug) {
diff --git a/src/views/project/Project_detail.vue b/src/views/project/Project_detail.vue
index 61e144f8..a07d8420 100644
--- a/src/views/project/Project_detail.vue
+++ b/src/views/project/Project_detail.vue
@@ -522,9 +522,11 @@ export default {
   },
   created() {
     this.$store.dispatch("GET_PROJECT_INFO", this.slug);
-    projectAPI
-      .getProjectSubscription({ projectSlug: this.$route.params.slug })
-      .then((data) => (this.is_suscriber = data.is_suscriber));
+    if (this.user) {
+      projectAPI
+        .getProjectSubscription({ projectSlug: this.$route.params.slug })
+        .then((data) => (this.is_suscriber = data.is_suscriber));
+    }
   },
 
   mounted() {
diff --git a/src/views/project/Project_members.vue b/src/views/project/Project_members.vue
index 9922d7ec..4e88ca63 100644
--- a/src/views/project/Project_members.vue
+++ b/src/views/project/Project_members.vue
@@ -93,7 +93,7 @@ export default {
           },
         };
       });
-      
+
       axios
         .put(
           `${this.$store.state.configuration.VUE_APP_DJANGO_API_BASE}projects/${this.project.slug}/utilisateurs/`,
-- 
GitLab