userauthjs
Version:
Node module for management of user/group privileges and sessions
143 lines (136 loc) • 5.35 kB
JavaScript
var Privilege = require('./models/privilege')
var User = require('./models/user')
var Usergroup = require('./models/usergroup')
/**
* Adds privilege to database.
*/
exports.add = function(title, next) {
Privilege.findOne({title: title}, function(err, privilege) {
if (err) { return next(err) }
if (privilege) { return next(null, false) }
privilege = new Privilege({title: title})
privilege.save(function(err, privilege) {
if (err) { return next(err) }
if (!privilege) { return next(null, false) }
if (process.env.USERAUTH_LOG) { console.log('Privilege added: '+ privilege.title) }
next(null, privilege)
})
})
}
exports.remove = function(title, next) {
Privilege.findOneAndRemove({ title: title }, function(err, privilege) {
if (err) { return next(err) }
if (!privilege) { return next(null, false) }
if (process.env.USERAUTH_LOG) { console.log('Privilege removed: '+ privilege.title) }
next(null, privilege)
})
}
exports.modify = function(title, newTitle, description, next) {
Privilege.findOne({ title: title }, function(err, privilege) {
if (err) { return next(err) }
if (!privilege) { return next(null, false) }
var oldDescription = privilege.description
if (newTitle && newTitle !== title) {
privilege.title = newTitle
}
if (description && oldDescription !== description) {
privilege.description = description
}
privilege.save(function(err, privilege) {
if (err) { return next(err) }
if (!privilege) { return next(null, false) }
if (newTitle && newTitle !== title) {
if (process.env.USERAUTH_LOG) { console.log('Privilege \''+ title + '\' renamed to \''+newTitle+'\'') }
}
if (description && oldDescription !== description) {
if (process.env.USERAUTH_LOG) { console.log('Description of privilege \'' + privilege.title + '\' modified') }
}
return next(null, privilege)
})
})
}
exports.addUser = function(userid, privilege, next) {
User.findOne({ _id: userid }, function(err, user) {
if (err) { return next(err) }
if (!user) { return next(null, false) }
Privilege.findOne({ title: privilege }, function(err, privilege) {
if (err) { return next(err) }
if (!privilege) { return next(null, false) }
if (privilege.users.indexOf(user._id) > -1) { return next(null, false) }
privilege.users.push(user._id)
privilege.save(function(err, privilege) {
if (err) { return next(err) }
if (!privilege) { return next(null, false) }
if (process.env.USERAUTH_LOG) { console.log('User \''+ user.username + '\' added to privilege \'' + privilege.title + '\'') }
next(null, privilege)
})
})
})
}
exports.removeUser = function(userid, privilege, next) {
User.findOne({ _id: userid }, function(err, user) {
if (err) { return next(err) }
if (!user) { return next(null, false) }
Privilege.findOne({ title: privilege }, function(err, privilege) {
if (err) { return next(err) }
if (!privilege) { return next(null, false) }
indexUser = privilege.users.indexOf(user._id)
if (indexUser < 0) { return next(null, false) }
privilege.users.splice(indexUser, 1)
privilege.save(function(err, privilege) {
if (err) { return next(err) }
if (!privilege) { return next(null, false) }
if (process.env.USERAUTH_LOG) { console.log('User \'' + user.username + '\' removed from privilege \'' + privilege.title + '\'') }
next(null, privilege)
})
})
})
}
exports.addUsergroup = function(groupname, privilegetitle, next) {
Usergroup.findOne({ groupname: groupname })
.exec(function(err, usergroup) {
if (err) { return next(err) }
if (!usergroup) { return next(null, false) }
Privilege.findOne({ title: privilegetitle }, function(err, privilege) {
if (err) { return next(err) }
if (!privilege) { return next(null, false) }
if (privilege.usergroups.indexOf(usergroup._id) > -1) { return next(null, false) }
privilege.usergroups.push(usergroup._id)
privilege.save(function(err, privilege) {
if (err) { return next(err) }
if (!privilege) { return next(null, false) }
if (process.env.USERAUTH_LOG) { console.log('Usergroup \'' + usergroup.groupname + '\' added to privilege \'' + privilege.title + '\'') }
next(null, privilege)
})
})
})
}
exports.removeUsergroup = function(groupname, privilegetitle, next) {
Usergroup.findOne({ groupname: groupname }, function(err, usergroup) {
if (err) { return next(err) }
if (!usergroup) { return next(null, false) }
Privilege.findOne({ title: privilegetitle }, function(err, privilege) {
if (err) { return next(err) }
if (!privilege) { return next(null, false) }
indexGroup = privilege.usergroups.indexOf(usergroup._id)
if (indexGroup < 0 ) { return next(null, false) }
privilege.usergroups.splice(indexGroup, 1)
privilege.save(function(err, privilege) {
if (err) { return next(err) }
if (!privilege) { return next(null, false) }
if (process.env.USERAUTH_LOG) { console.log('Usergroup \'' + usergroup.groupname + '\' removed from privilege \'' + privilege.title + '\'') }
next(null, privilege)
})
})
})
}
exports.getPrivilegeByTitle = function(title, next) {
Privilege.findOne({ title: title })
.populate('users')
.populate('usergroups')
.exec(function(err, privilege) {
if (err) { return next(err) }
if (!privilege) { return next(null, false) }
next(null, privilege)
})
}