Skip to content

Commit 056bf62

Browse files
authored
Fix issue where a dojo-admin would not be able to use manage-event-us… (CoderDojo#163)
* Fix issue where a dojo-admin would not be able to use manage-event-users due to permissions
1 parent ee8808f commit 056bf62

File tree

1 file changed

+53
-4
lines changed

1 file changed

+53
-4
lines changed

lib/perm/is-ticketing-admin.js

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
'use strict';
22
var _ = require('lodash');
3-
3+
var async = require('async');
44

55
function isTicketingAdmin (args, cb) {
66
var seneca = this;
77
var plugin = args.role;
8-
var userId, dojoId;
8+
var userId, dojoId, eventId, sessionId;
99
if(args.user) userId = args.user.id;
1010

1111
if (args.params) {
1212
if(args.params.query) dojoId = args.params.query.dojoId;
1313
if(args.params.eventInfo && _.isUndefined(dojoId)) dojoId = args.params.eventInfo.dojoId;
1414
if(args.params.query && _.isUndefined(dojoId)) dojoId = args.params.query.id;
15+
if(args.params.query && _.isUndefined(dojoId)) eventId = args.params.query.eventId;
16+
if(args.params.query && _.isUndefined(dojoId) && _.isUndefined(eventId)) sessionId = args.params.query.sessionId;
1517
} else {
1618
if(args.query) dojoId = args.query.dojoId;
1719
if(args.eventInfo && _.isUndefined(dojoId)) dojoId = args.eventInfo.dojoId;
@@ -20,7 +22,49 @@ function isTicketingAdmin (args, cb) {
2022

2123
var isTicketingAdmin = false;
2224
// Could also check the opposite way, from child to Parent
23-
seneca.act({role: 'cd-dojos', cmd: 'load_usersdojos', query: { userId: userId, dojoId: dojoId }},
25+
function checkPrerequisites (wfCb) {
26+
function getEventFromSession (_wCb) {
27+
if (sessionId) { // We need to get the dojoId associated
28+
seneca.act({role: 'cd-events', cmd: 'loadSession', id: sessionId}, function (err, session) {
29+
if (err) return cb(err);
30+
if (session.eventId) {
31+
eventId = session.eventId;
32+
return _wCb();
33+
} else {
34+
return cb(null, {'allowed': false});
35+
}
36+
});
37+
} else {
38+
return _wCb();
39+
}
40+
}
41+
function getDojoFromEvent (_wCb) {
42+
if (eventId) { // We need to get the dojoId associated
43+
seneca.act({role: 'cd-events', cmd: 'getEvent', id: eventId}, function (err, event) {
44+
if (err) return cb(err);
45+
if (event.dojoId) {
46+
dojoId = event.dojoId;
47+
return _wCb();
48+
} else {
49+
return cb(null, {'allowed': false});
50+
}
51+
});
52+
} else {
53+
return _wCb();
54+
}
55+
}
56+
if (_.isUndefined(dojoId) && (eventId || sessionId)) {
57+
async.waterfall([
58+
getEventFromSession,
59+
getDojoFromEvent
60+
], wfCb);
61+
} else {
62+
return wfCb();
63+
}
64+
}
65+
function verifyPermissions(wfCb) {
66+
if (_.isUndefined(dojoId)) return cb(null, {'allowed': false});
67+
seneca.act({role: 'cd-dojos', cmd: 'load_usersdojos', query: { userId: userId, dojoId: dojoId, deleted: 0 }},
2468
function (err, response) {
2569
var userDojoEntity = response[0];
2670
if (err) {
@@ -31,7 +75,12 @@ function isTicketingAdmin (args, cb) {
3175
return userPermission.name === 'ticketing-admin';
3276
});
3377
return cb(null, {'allowed': !!isTicketingAdmin});
34-
});
78+
});
79+
}
80+
async.waterfall([
81+
checkPrerequisites,
82+
verifyPermissions
83+
]);
3584
}
3685

3786
module.exports = isTicketingAdmin;

0 commit comments

Comments
 (0)