all files / src/privileges/ helpers.js

62.5% Statements 25/40
50% Branches 6/12
61.54% Functions 8/13
62.5% Lines 25/40
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83          58× 143× 143×     58×       27×       27× 27× 27× 27×     27×   27×     27×     27×       27× 27× 27×     27×                                                                  
 
'use strict';
 
var async = require('async');
var groups = require('../groups');
 
var helpers = {};
 
helpers.some = function(tasks, callback) {
	async.some(tasks, function(task, next) {
		task(function(err, result) {
			next(!err && result);
		});
	}, function(result) {
		callback(null, result);
	});
};
 
helpers.isUserAllowedTo = function(privilege, uid, cids, callback) {
	Iif (parseInt(uid, 10) === 0) {
		return isGuestAllowedTo(privilege, cids, callback);
	}
 
	var userKeys = [], groupKeys = [];
	for (var i=0; i<cids.length; ++i) {
		userKeys.push('cid:' + cids[i] + ':privileges:' + privilege);
		groupKeys.push('cid:' + cids[i] + ':privileges:groups:' + privilege);
	}
 
	async.parallel({
		hasUserPrivilege: function(next) {
			groups.isMemberOfGroups(uid, userKeys, next);
		},
		hasGroupPrivilege: function(next) {
			groups.isMemberOfGroupsList(uid, groupKeys, next);
		}
	}, function(err, results) {
		Iif (err) {
			return callback(err);
		}
 
		var result = [];
		for (var i=0; i<cids.length; ++i) {
			result.push(results.hasUserPrivilege[i] || results.hasGroupPrivilege[i]);
		}
 
		callback(null, result);
	});
};
 
helpers.isUsersAllowedTo = function(privilege, uids, cid, callback) {
	async.parallel({
		hasUserPrivilege: function(next) {
			groups.isMembers(uids, 'cid:' + cid + ':privileges:' + privilege, next);
		},
		hasGroupPrivilege: function(next) {
			groups.isMembersOfGroupList(uids, 'cid:' + cid + ':privileges:groups:' + privilege, next);
		}
	}, function(err, results) {
		if (err) {
			return callback(err);
		}
 
		var result = [];
		for(var i=0; i<uids.length; ++i) {
			result.push(results.hasUserPrivilege[i] || results.hasGroupPrivilege[i]);
		}
 
		callback(null, result);
	});
};
 
function isGuestAllowedTo(privilege, cids, callback) {
	var groupKeys = [];
	for (var i=0; i<cids.length; ++i) {
		groupKeys.push('cid:' + cids[i] + ':privileges:groups:' + privilege);
	}
 
	groups.isMemberOfGroups('guests', groupKeys, callback);
}
 
 
module.exports = helpers;