diff --git a/src/api.js b/src/api.js
index cb1a088dd1616b2dbfe7c311d659f709f85d5a75..de66b976355aff6b346246a3bf8819868ff2ce77 100644
--- a/src/api.js
+++ b/src/api.js
@@ -33,7 +33,7 @@ export const api = {
   },
   async getUser () {
     const token = await localStorage.getItem('token')
-    const url = serverurl + 'user'
+    const url = serverurl + 'users'
     try {
       const response = await fetch(url, { headers: { Authorization: 'Bearer ' + token } })
       return await response.json()
@@ -88,7 +88,7 @@ export const api = {
   },
   async getUserList () {
     const token = await localStorage.getItem('token')
-    const url = serverurl + 'user/list'
+    const url = serverurl + 'users/list'
     try {
       const response = await fetch(url, { headers: { Authorization: 'Bearer ' + token } })
       return await response.json()
@@ -187,7 +187,7 @@ export const api = {
   },
   async removeUser (id) {
     const token = await localStorage.getItem('token')
-    const url = serverurl + 'user' + '?id=' + id
+    const url = serverurl + 'users' + '?id=' + id
     try {
       await fetch(url, {
         method: 'DELETE',
@@ -222,7 +222,7 @@ export const api = {
     }
   },
   async register (username, email, password) {
-    const url = serverurl + 'user/signup'
+    const url = serverurl + 'users/signup'
     try {
       const response = await fetch(
         url, {
@@ -376,5 +376,19 @@ export const api = {
     } catch (error) {
       return false
     }
+  },
+  async setAdmin (id) {
+    const url = serverurl + 'users/setAdmin' + '?id=' + id
+    const token = await localStorage.getItem('token')
+    const response = await fetch(url, {
+      headers: {
+        Authorization: 'Bearer ' + token
+      }
+    })
+    try {
+      return await response.json()
+    } catch (error) {
+      return null
+    }
   }
 }
diff --git a/src/components/Comments.vue b/src/components/Comments.vue
index 6f375ce36f8176bcf555b4466f4defc9889bd068..2980c1b6f648ba947bce10e1fa5b6e7c6734862f 100644
--- a/src/components/Comments.vue
+++ b/src/components/Comments.vue
@@ -48,7 +48,7 @@ export default {
 
     const userRole = await localStorage.getItem('user_role')
     if (userRole) this.isLoggedIn = true
-    if (userRole === 'ROLE_ADMIN') this.isAdmin = true
+    if (userRole === 'ADMIN') this.isAdmin = true
   },
   methods: {
     async postComment () {
diff --git a/src/views/Account.vue b/src/views/Account.vue
index dbcc6329fd76c058c7de9a26f9b96fd10c6e3f2a..95cd4146f4b1828112193e3e274bc6520db6acc0 100644
--- a/src/views/Account.vue
+++ b/src/views/Account.vue
@@ -21,7 +21,7 @@
         </b-button>
 
         <b-button
-         v-if="account.role == 'ROLE_ADMIN'"
+         v-if="account.role == 'ADMIN'"
          icon-left="cctv"
          type="is-info"
          tag="router-link"
diff --git a/src/views/Admin.vue b/src/views/Admin.vue
index 505e8ce6b5ed99937d973ca52ab6d441e670e3cc..89a20eaf75313b4faa622bc708016b03cccfe9bd 100644
--- a/src/views/Admin.vue
+++ b/src/views/Admin.vue
@@ -78,7 +78,12 @@
                 {{ props.row.email }}
               </b-table-column>
 
+              <b-table-column field="role" label="Role" sortable>
+                {{ props.row.role }}
+              </b-table-column>
+
               <b-table-column label="" centered>
+                <b-button class="actionButton" icon-left="cctv" type="is-success" @click="setAdminPrompt(props.row.id, props.row.username)" outlined/>
                 <b-button class="actionButton" icon-left="delete" type="is-danger" @click="removePrompt(props.row.id, props.row.username, 'user')" outlined/>
               </b-table-column>
             </template>
@@ -195,6 +200,20 @@ export default {
           this.modelList = await api.getModelList()
         }
       })
+    },
+    setAdminPrompt (id, name) {
+      this.$buefy.dialog.confirm({
+        message: 'Set admin role for ' + name + ' ?',
+        cancelText: 'Abort',
+        confirmText: 'Set',
+        type: 'is-success',
+        hasIcon: true,
+        onConfirm: async () => {
+          await api.setAdmin(id)
+          this.$buefy.toast.open(name + ' role has been changed')
+          this.userList = await api.getUserList()
+        }
+      })
     }
   }
 }
diff --git a/src/views/Model.vue b/src/views/Model.vue
index c147cc3994ae8316ba1138ded1da2c3a84893dde..bdd18397791c6b91bac9ad9c3a45ed280a35185d 100644
--- a/src/views/Model.vue
+++ b/src/views/Model.vue
@@ -105,7 +105,7 @@ export default {
     if (parseInt(userId) === this.model.author.id) this.isAuthor = true
 
     const userRole = await localStorage.getItem('user_role')
-    if (userRole === 'ROLE_ADMIN') this.isAuthor = true
+    if (userRole === 'ADMIN') this.isAuthor = true
 
     this.downloadUrl = this.$serverurl + 'models/download?id=' + this.model.id
   },