summaryrefslogblamecommitdiffstats
path: root/server/api/permissions.js
blob: 7894719ce87ec502c399a6cfa36017bdb4103ed0 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
                     

                                                         
 
               
                      





                                                                                   
                                    


                                                                                                       

      
 


                                                          
                                    
                     



                                         

    


                                                                
                                          
                                                         

                                       

   
 
                
                       





                                      
                                    

                               
                                                                  



                                     




                                  

                                     
    
                                                                                                       
     
                                 
                         
 

                                   
                                                                                                                  
                         

                                                              



                                                                       
                                                                  
                         
                                                                                                                 

                                                              


                                                                       
   
 
/* global __appdir */
var path = require('path')
var db = require(path.join(__appdir, 'lib', 'sequelize'))

// GET requests
module.exports.get = {

  /*
   * ?id=<ROLE_ID>
   *
   * @return: Returns the information about a role and it's permissions and groups.
   */
  getRoleById: function (req, res) {
    db.role.findOne({ where: { id: req.query.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.
   */
  getRoleList: function (req, res) {
    db.role.findAll({
      attributes: ['id', 'name', 'descr']
    }).then(function (roles) {
      res.status(200).send(roles)
    })
  },

  /*
   * @return: Returns a list of all permissions in the database.
   */
  getPermissionList: function (req, res) {
    db.permission.findAll().then(function (permissions) {
      res.status(200).send(permissions)
    })
  }
}

// POST requests
module.exports.post = {

  /*
   * id: <ROLE_ID>
   *
   * Deletes the role to the given id.
   */
  deleteRoles: function (req, res) {
    const roleIds = req.body.id

    db.role.destroy({ where: { id: roleIds } }).then(function () {
      res.status(200).send('success')
    })
  },

  /*
   * id: <ROLE_ID>
   * name: <ROLE_NAME>
   * descr: <ROLE_DESCRIPTION>
   * permissions: <PERMISSION_IDS>
   * groups: <GROUP_IDS>,
   * recursiveMode: < RECURSIVE_MODE>
   *
   * Creates or updates a role. If recursiveMode is set to true, the <GROUP_IDS> are saved with childs.
   */
  saveRole: function (req, res) {
    const role = req.body

    if (role.id === 0) {
      // Insert new role in the db.
      db.role.create({ name: role.name, descr: role.descr, recursiveGroups: role.recursiveMode }).then(roleDb => {
        var promises = []
        promises.push(roleDb.addPermissions(role.permissions))
        promises.push(roleDb.addGroups(role.groups))
        Promise.all(promises).then(() => { res.send({ id: role.id }) })
      })
    } else {
      // Update an existing role in the db.
      db.role.findOne({ where: { id: role.id } }).then(roleDb => {
        var promises = []
        promises.push(roleDb.update({ name: role.name, descr: role.descr, recursiveGroups: role.recursiveMode }))
        promises.push(roleDb.setPermissions(role.permissions))
        promises.push(roleDb.setGroups(role.groups))
        Promise.all(promises).then(() => { res.send({ id: role.id }) })
      })
    }
  }
}