summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--server/api/users.js112
-rw-r--r--webapp/src/components/DashboardPage.vue2
-rw-r--r--webapp/src/components/GroupModuleDialog.vue3
-rw-r--r--webapp/src/components/PermissionModuleGrantRevoke.vue45
-rw-r--r--webapp/src/store/permissions.js2
5 files changed, 65 insertions, 99 deletions
diff --git a/server/api/users.js b/server/api/users.js
index 8287bb4..aca4188 100644
--- a/server/api/users.js
+++ b/server/api/users.js
@@ -1,70 +1,54 @@
/* global __appdir */
var path = require('path')
var db = require(path.join(__appdir, 'lib', 'sequelize'))
-
-// GET requests
-module.exports.get = {
-
- getUserInfo: function (req, res) {
- db.user.findOne({ where: { id: req.user.id } }).then(userDb => {
- var user = { }
- user.id = userDb.id
- user.username = userDb.username
- user.email = userDb.email
- user.name = userDb.name
- res.status(200).send(user)
- })
- },
-
- /*
- * @return: Returns a list of all users in the database and their given roles.
- */
- getUserList: function (req, res) {
- db.user.findAll({
- attributes: ['id', 'username', 'name'],
- include: ['roles']
- }).then(function (users) {
- res.status(200).send(users)
- })
+var jwt = require('jsonwebtoken')
+var express = require('express')
+const { decorateApp } = require('@awaitjs/express')
+var router = decorateApp(express.Router())
+
+// ############################################################################
+// ########################### GET requests #################################
+
+/*
+ * @return: Returns a list of all users in the database and their given roles.
+ */
+router.getAsync('', async (req, res) => {
+ const users = await db.user.findAll({ include: ['roles'], order: [['name', 'ASC']] })
+ res.status(200).send(users)
+})
+
+/*
+ * @return: Returns information about a specific user.
+ */
+router.getAsync('/:id', async (req, res) => {
+ const id = req.params.id === 'current' ? req.user.id : req.params.id
+ const user = await db.user.findOne({ where: { id } })
+ if (user) {
+ res.status(200).send(user)
+ } else {
+ res.status(404).end()
}
-}
-
-// POST requests
-module.exports.post = {
-
- /*
- * roleIds: <ROLE_IDS>
- * userIds: <USER_IDS>
- *
- * Adds the given roles to the given users in the database.
- */
- grantRoles: function (req, res) {
- const roleIds = req.body.roleIds
- const userIds = req.body.userIds
-
- db.user.findAll({ where: { id: userIds } }).then(users => {
- users.forEach(user => {
- user.addRoles(roleIds)
- })
- res.status(200).send('success')
- })
- },
+})
+
+// ############################################################################
+// ########################## POST requests #################################
+
+router.postAsync('/:id/roles', async (req, res) => {
+ const id = req.params.id === 'current' ? req.user.id : req.params.id
+ const user = await db.user.findOne({ where: { id } })
+ if (user) {
+ if (req.query.delete !== undefined && req.query.delete !== 'false') {
+ await user.removeRoles(req.body.ids)
+ } else {
+ await user.addRoles(req.body.ids)
+ }
+ res.status(200).end()
+ } else {
+ res.status(404).end()
+ }
+})
- /*
- * roleIds: <ROLE_IDS>
- * userIds: <USER_IDS>
- *
- * Removes the given roles from the given users in the database.
- */
- revokeRoles: function (req, res) {
- const roleIds = req.body.roleIds
- const userIds = req.body.userIds
+// ############################################################################
+// ############################################################################
- db.user.findAll({ where: { id: userIds } }).then(users => {
- users.forEach(user => {
- user.removeRoles(roleIds)
- })
- res.status(200).send('success')
- })
- }
-}
+module.exports.router = router
diff --git a/webapp/src/components/DashboardPage.vue b/webapp/src/components/DashboardPage.vue
index 922b14b..4b92de4 100644
--- a/webapp/src/components/DashboardPage.vue
+++ b/webapp/src/components/DashboardPage.vue
@@ -198,7 +198,7 @@ export default {
},
created () {
if (this.settings.mini && this.desktop) this.drawerOpen = true
- this.$http('/api/users/getUserInfo').then(response => {
+ this.$http('/api/users/current').then(response => {
this.userFullName = response.data.name
})
}
diff --git a/webapp/src/components/GroupModuleDialog.vue b/webapp/src/components/GroupModuleDialog.vue
index a60a8e5..7c20e85 100644
--- a/webapp/src/components/GroupModuleDialog.vue
+++ b/webapp/src/components/GroupModuleDialog.vue
@@ -94,7 +94,7 @@
<v-icon left>create</v-icon>{{ $t('new') }}
</v-btn>
</v-card-title>
- <v-card-text style="height: 616px" v-if="action === 'add'" class="table-container">
+ <v-card-text v-if="action === 'add'" class="table-container">
<v-divider></v-divider>
<component-search-table v-model="selected" :headers="headers" :items="items" select-all>
<template slot="items" slot-scope="row">
@@ -213,6 +213,7 @@ export default {
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.table-container {
+ height: 100%;
padding: 0;
}
.dialog-title {
diff --git a/webapp/src/components/PermissionModuleGrantRevoke.vue b/webapp/src/components/PermissionModuleGrantRevoke.vue
index d2d63f8..559fdfc 100644
--- a/webapp/src/components/PermissionModuleGrantRevoke.vue
+++ b/webapp/src/components/PermissionModuleGrantRevoke.vue
@@ -65,7 +65,7 @@
<v-stepper v-model="step" horizontal style="width: 100%; background: transparent" class="elevation-0">
<v-stepper-items>
<v-stepper-content step="1" class="stepper-padding-0">
- <data-table v-model="rolesSelected" :headers="roleHeaders" :items="roles"/>
+ <data-table v-model="selectedRoles" :headers="roleHeaders" :items="roles"/>
</v-stepper-content>
<v-stepper-content step="2">
<v-layout row wrap>
@@ -74,7 +74,7 @@
<v-subheader inset>{{ $t('roles') }}</v-subheader>
<v-divider class="list-header-margin"></v-divider>
<v-list-tile
- v-for="role in rolesSelected"
+ v-for="role in selectedRoles"
:key="role.id"
>
<v-list-tile-content>
@@ -132,7 +132,7 @@ export default {
valid: true,
step: 1,
stepCompleted: 0,
- rolesSelected: [],
+ selectedRoles: [],
roleHeaders: [
{ text: this.$t('id'), key: 'id' },
{ text: this.$t('name'), key: 'name' },
@@ -141,34 +141,15 @@ export default {
}
},
methods: {
- submit (event) {
- const filteredRoles = this.rolesSelected.map(x => x.id)
- const filteredUsers = this.selectedUsers.map(x => x.id)
- if (this.grant) {
- this.$http.post('/api/users/grantRoles', {
- userIds: filteredUsers,
- roleIds: filteredRoles
- }).then(response => {
- this.$store.commit('newSnackbar', this.$t('roleGrantedSuccess'))
- this.$store.dispatch('permissions/loadData')
- this.$store.commit('permissions/setGrantRevoke', false)
- this.$store.commit('permissions/setSelectedUsers', [])
- }).catch(error => {
- console.log(error)
- })
- } else {
- this.$http.post('/api/users/revokeRoles', {
- userIds: filteredUsers,
- roleIds: filteredRoles
- }).then(response => {
- this.$store.commit('newSnackbar', this.$t('roleRevokedSuccess'))
- this.$store.dispatch('permissions/loadData')
- this.$store.commit('permissions/setGrantRevoke', false)
- this.$store.commit('permissions/setSelectedUsers', [])
- }).catch(error => {
- console.log(error)
- })
- }
+ async submit (event) {
+ const roleIds = this.selectedRoles.map(x => x.id)
+ this.selectedUsers.forEach(user => {
+ this.$http.post('/api/users/' + user.id + '/roles' + (this.grant ? '' : '/?delete'), { ids: roleIds })
+ })
+ this.$store.commit('newSnackbar', this.$t(this.grant ? 'roleGrantedSuccess' : 'roleRevokedSuccess'))
+ this.$store.dispatch('permissions/loadData')
+ this.$store.commit('permissions/setGrantRevoke', false)
+ this.$store.commit('permissions/setSelectedUsers', [])
},
completeStepOne () {
this.step = 2
@@ -184,7 +165,7 @@ export default {
watch: {
grantRevoke: function (value) {
if (value) {
- this.rolesSelected = []
+ this.selectedRoles = []
this.step = 1
this.stepCompleted = 0
}
diff --git a/webapp/src/store/permissions.js b/webapp/src/store/permissions.js
index 10b90b6..b15b0d1 100644
--- a/webapp/src/store/permissions.js
+++ b/webapp/src/store/permissions.js
@@ -59,7 +59,7 @@ export default {
})
},
loadUserData (context) {
- axios.get('/api/users/getUserList').then(response => {
+ axios.get('/api/users').then(response => {
context.commit('setUsers', response.data)
})
},