From 403e8ab91ee1dc303e3bfb54ec615ae415ab211e Mon Sep 17 00:00:00 2001
From: Mark <mark@openappstack.net>
Date: Tue, 22 Oct 2019 14:38:41 +0200
Subject: [PATCH] Add remove roles function

---
 frontend/components/edit-user.vue |  4 +++-
 frontend/pages/users.vue          | 38 +++++++++++++++++++++++++++++--
 2 files changed, 39 insertions(+), 3 deletions(-)

diff --git a/frontend/components/edit-user.vue b/frontend/components/edit-user.vue
index 5216f1b..9aa962c 100644
--- a/frontend/components/edit-user.vue
+++ b/frontend/components/edit-user.vue
@@ -10,7 +10,9 @@
       <b-form-input type="email" v-model="user.email"></b-form-input>
     </b-col>
     <b-col cols="1">
-        <b-badge class="mr-1" variant="primary" v-for="role in user.roles" v-bind:key="role">{{role}}</b-badge>
+        <b-badge class="mr-1" href="#" variant="primary" v-for="(role, index) in user.roles" v-bind:key="role" @click="user.roles.splice(index, 1)">
+            {{role}} &times;
+            </b-badge>
     </b-col>
     <b-col cols="3">
       <b-button-group v-show="!showAddRole">
diff --git a/frontend/pages/users.vue b/frontend/pages/users.vue
index ee5d3dd..4245732 100644
--- a/frontend/pages/users.vue
+++ b/frontend/pages/users.vue
@@ -62,8 +62,42 @@ import axios from 'axios'
 export default {
   methods: {
     saveUser: function(username, index){
-      console.log(username);
-      console.log(index);
+      const user = this.users[index]
+      var query;
+      if (user.password == ""){
+        query= 'mutation{editUser(username: "' + username + '", email: "' + user.email +'"){ok}}'
+      }
+      else {
+        query= 'mutation{editUser(username: "' + username + '", email: "' + user.email +'", password: "' + user.password +'"){ok}}'
+      }
+      axios.post(
+        '/api/admin/graphql', {query: query}).then((res) => {
+            console.log("user updated")
+          });
+      user.roles.forEach( role => {
+        var roleObj = this.roles.find(element => {return element.name == role});
+        if (!roleObj.users.includes(username)){
+          var addRoleMutation = 'mutation{addRoleToUser( role: "' + role + '", username: "' + username +'"){user{username}, role{name}}}'
+          axios.post(
+            '/api/admin/graphql', {
+                query: addRoleMutation
+                }).then((res) => {
+                    roleObj.users.push(username);
+            });
+          }
+        });
+      this.roles.forEach( role => {
+        if(role.users.includes(username) && !user.roles.includes(role.name)){
+          var rmRoleMutation = 'mutation{removeRoleFromUser( role: "' + role.name + '", username: "' + username +'"){ok}}'
+          axios.post(
+            '/api/admin/graphql', {
+                query: rmRoleMutation
+                }).then((res) => {
+                    role.users.splice(role.users.findIndex( element => { return element == username }),1);
+            });
+        }
+
+      })
     },
     selectRole: function(roleName){
         this.selectedRole = roleName;
-- 
GitLab