summaryrefslogtreecommitdiffstats
path: root/server/api/roles.js
diff options
context:
space:
mode:
authorChristian Hofmaier2019-02-15 16:14:30 +0100
committerChristian Hofmaier2019-02-15 16:14:30 +0100
commit3b245c0998714c5f79defd0f756ae83002273c17 (patch)
tree31cfdfde706b62880a93812d1348a0513713c734 /server/api/roles.js
parentImplement Middlware for Permission Manager (diff)
downloadbas-3b245c0998714c5f79defd0f756ae83002273c17.tar.gz
bas-3b245c0998714c5f79defd0f756ae83002273c17.tar.xz
bas-3b245c0998714c5f79defd0f756ae83002273c17.zip
[permissionmanager]Integrate new data-table + api format
Diffstat (limited to 'server/api/roles.js')
-rw-r--r--server/api/roles.js70
1 files changed, 70 insertions, 0 deletions
diff --git a/server/api/roles.js b/server/api/roles.js
new file mode 100644
index 0000000..5e62443
--- /dev/null
+++ b/server/api/roles.js
@@ -0,0 +1,70 @@
+/* global __appdir */
+var path = require('path')
+var db = require(path.join(__appdir, 'lib', 'sequelize'))
+var express = require('express')
+const { decorateApp } = require('@awaitjs/express')
+var router = decorateApp(express.Router())
+
+/*
+ * ?id=<ROLE_ID>
+ *
+ * @return: Returns the information about a role and it's permissions and groups.
+ */
+router.get('/:id', (req, res) => {
+ db.role.findOne({ where: { id: req.params.id }, include: ['permissions', 'groups'] }).then(role => {
+ if (role) res.send(role)
+ else res.status(404).end()
+ })
+})
+
+/*
+ * @return: Returns a list of all roles in the database.
+ */
+router.get('', (req, res) => {
+ db.role.findAll({
+ attributes: ['id', 'name', 'descr']
+ }).then(function (roles) {
+ res.status(200).send(roles)
+ })
+})
+
+/*
+ * id: <ROLE_ID>
+ * name: <ROLE_NAME>
+ * descr: <ROLE_DESCRIPTION>
+ * permissions: <PERMISSION_IDS>
+ * groups: <GROUP_IDS>,
+ * recursiveMode: < RECURSIVE_MODE>
+ *
+ * Creates, updates or deletes a role. If recursiveMode is set to true, the <GROUP_IDS> are saved with childs.
+ *
+ */
+router.post(['', '/:id'], (req, res) => {
+ // ?delete Delete the roles
+ if (req.query.delete !== undefined && req.query.delete !== 'false') {
+ db.role.destroy({ where: { id: req.body.ids } }).then(function () {
+ res.status(200).send('success')
+ })
+ } else {
+ if (req.params.id === undefined) {
+ // Create new role
+ db.role.create({ name: req.body.name, descr: req.body.descr, recursiveGroups: req.body.recursiveMode }).then(roleDb => {
+ var promises = []
+ promises.push(roleDb.addPermissions(req.body.permissions))
+ promises.push(roleDb.addGroups(req.body.groups))
+ Promise.all(promises).then(() => { res.send({ id: req.body.id }) })
+ })
+ } else {
+ // Update existing role
+ db.role.findOne({ where: { id: req.body.id } }).then(roleDb => {
+ var promises = []
+ promises.push(roleDb.update({ name: req.body.name, descr: req.body.descr, recursiveGroups: req.body.recursiveMode }))
+ promises.push(roleDb.setPermissions(req.body.permissions))
+ promises.push(roleDb.setGroups(req.body.groups))
+ Promise.all(promises).then(() => { res.send({ id: req.body.id }) })
+ })
+ }
+ }
+})
+
+module.exports.router = router