1
1
'use strict' ;
2
2
var _ = require ( 'lodash' ) ;
3
-
3
+ var async = require ( 'async' ) ;
4
4
5
5
function isTicketingAdmin ( args , cb ) {
6
6
var seneca = this ;
7
7
var plugin = args . role ;
8
- var userId , dojoId ;
8
+ var userId , dojoId , eventId , sessionId ;
9
9
if ( args . user ) userId = args . user . id ;
10
10
11
11
if ( args . params ) {
12
12
if ( args . params . query ) dojoId = args . params . query . dojoId ;
13
13
if ( args . params . eventInfo && _ . isUndefined ( dojoId ) ) dojoId = args . params . eventInfo . dojoId ;
14
14
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 ;
15
17
} else {
16
18
if ( args . query ) dojoId = args . query . dojoId ;
17
19
if ( args . eventInfo && _ . isUndefined ( dojoId ) ) dojoId = args . eventInfo . dojoId ;
@@ -20,7 +22,49 @@ function isTicketingAdmin (args, cb) {
20
22
21
23
var isTicketingAdmin = false ;
22
24
// 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 } } ,
24
68
function ( err , response ) {
25
69
var userDojoEntity = response [ 0 ] ;
26
70
if ( err ) {
@@ -31,7 +75,12 @@ function isTicketingAdmin (args, cb) {
31
75
return userPermission . name === 'ticketing-admin' ;
32
76
} ) ;
33
77
return cb ( null , { 'allowed' : ! ! isTicketingAdmin } ) ;
34
- } ) ;
78
+ } ) ;
79
+ }
80
+ async . waterfall ( [
81
+ checkPrerequisites ,
82
+ verifyPermissions
83
+ ] ) ;
35
84
}
36
85
37
86
module . exports = isTicketingAdmin ;
0 commit comments