userauthjs
Version:
Node module for management of user/group privileges and sessions
95 lines (91 loc) • 3.4 kB
JavaScript
var async = require('async')
var bcrypt = require('bcrypt')
var User = require('./models/user')
var Usergroup = require('./models/usergroup')
var Privilege = require('./models/privilege')
/**
* Adds privilege to specified usergroups.
*/
exports.add = function(groupname, next) {
Usergroup.findOne({ groupname: groupname }, function(err, usergroup) {
if (err) { return next(err) }
if (usergroup) { return next(null, false) }
usergroup = new Usergroup({ groupname: groupname})
usergroup.save(function(err, usergroup) {
if (err) { return next(err) }
if (process.env.USERAUTH_LOG) { console.log('Usergroup added: ' + usergroup.groupname) }
next(null, usergroup)
})
})
}
exports.remove = function(groupname, next) {
Usergroup.findOne({ groupname: groupname }, function(err, usergroup) {
if (err) { return next(err) }
if (!usergroup) { return next(null, false) }
usergroup.remove(function(err, usergroup) {
if (err) { return next(err) }
if (!usergroup) { return next(null, false) }
Privilege.find(function(err, privileges) {
if (err) { return next(err) }
if (!privileges) { return next(null, false) }
var indexGroup
async.each(privileges, function(privilege, done) {
indexGroup = privilege.usergroups.indexOf(usergroup._id)
if (indexGroup > -1) {
privilege.usergroups.splice(indexGroup, 1)
privilege.save(function(err, privilege) {
if (err) { return done(err) }
if (process.env.USERAUTH_LOG) { console.log('Usergroup \''+usergroup.groupname+'\' removed from privilege \''+privilege.title+'\'') }
done()
})
} else {
done()
}
}, function(err) {
if (err) { return next(err) }
if (process.env.USERAUTH_LOG) { console.log('Usergroup removed: '+usergroup.groupname) }
next(null, usergroup)
})
})
})
})
}
exports.addUser = function(username, groupname, next) {
User.findOne({ username: username }, function(err, user) {
if (err) { return next(err) }
if (!user) { return next(null, false) }
Usergroup.findOne({ groupname: groupname }, function(err, usergroup) {
if (err) { return next(err) }
if (!usergroup) { return next(null, false) }
if (user.usergroups.indexOf(usergroup._id) > -1) { return next(null, false) }
user.usergroups.push(usergroup._id)
user.save(function(err, user) {
if (err) { return next(err) }
if (!user) { return next(null, false) }
if (process.env.USERAUTH_LOG) { console.log('User \'' + user.username + '\' to usergroup \''+usergroup.groupname + '\'') }
next(null, user)
})
})
})
}
exports.removeUser = function(username, groupname, next) {
User.findOne({ username: username })
.select('usergroups')
.exec(function(err, user) {
if (err) { return next(err) }
if (!user) { return next(null, false) }
Usergroup.findOne({ groupname: groupname }, function(err, usergroup) {
if (err) { return next(err) }
if (!usergroup) { return next(null, false) }
indexGroup = user.usergroups.indexOf(usergroup._id)
if (indexGroup < 0 ) { return next(null, false) }
user.usergroups.splice(indexGroup, 1)
user.save(function(err, user) {
if (err) { return next(err) }
if (!user) { return next(null, false) }
if (process.env.USERAUTH_LOG) { console.log('User \'' + user.username + '\' removed from usergroup \''+usergroup.groupname + '\'') }
next(null, user)
})
})
})
}