75 lines
1.6 KiB
JavaScript
75 lines
1.6 KiB
JavaScript
/* jslint node: true */
|
|
'use strict';
|
|
|
|
const userDb = require('./database.js').dbs.user;
|
|
|
|
const async = require('async');
|
|
const _ = require('lodash');
|
|
|
|
exports.getGroupsForUser = getGroupsForUser;
|
|
exports.addUserToGroup = addUserToGroup;
|
|
exports.addUserToGroups = addUserToGroups;
|
|
exports.removeUserFromGroup = removeUserFromGroup;
|
|
|
|
function getGroupsForUser(userId, cb) {
|
|
const sql = `SELECT group_name
|
|
FROM user_group_member
|
|
WHERE user_id=?;`;
|
|
|
|
const groups = [];
|
|
|
|
userDb.each(
|
|
sql,
|
|
[userId],
|
|
(err, row) => {
|
|
if (err) {
|
|
return cb(err);
|
|
}
|
|
|
|
groups.push(row.group_name);
|
|
},
|
|
() => {
|
|
return cb(null, groups);
|
|
}
|
|
);
|
|
}
|
|
|
|
function addUserToGroup(userId, groupName, transOrDb, cb) {
|
|
if (!_.isFunction(cb) && _.isFunction(transOrDb)) {
|
|
cb = transOrDb;
|
|
transOrDb = userDb;
|
|
}
|
|
|
|
transOrDb.run(
|
|
`REPLACE INTO user_group_member (group_name, user_id)
|
|
VALUES(?, ?);`,
|
|
[groupName, userId],
|
|
err => {
|
|
return cb(err);
|
|
}
|
|
);
|
|
}
|
|
|
|
function addUserToGroups(userId, groups, transOrDb, cb) {
|
|
async.each(
|
|
groups,
|
|
(groupName, nextGroupName) => {
|
|
return addUserToGroup(userId, groupName, transOrDb, nextGroupName);
|
|
},
|
|
err => {
|
|
return cb(err);
|
|
}
|
|
);
|
|
}
|
|
|
|
function removeUserFromGroup(userId, groupName, cb) {
|
|
userDb.run(
|
|
`DELETE FROM user_group_member
|
|
WHERE group_name=? AND user_id=?;`,
|
|
[groupName, userId],
|
|
err => {
|
|
return cb(err);
|
|
}
|
|
);
|
|
}
|