@@ -37,7 +37,11 @@ export default class TasksService {
3737 ) : Promise < Task > {
3838 const requestedWbsElement = await prisma . wBS_Element . findUnique ( {
3939 where : { wbsNumber : wbsNum } ,
40- include : { project : { include : { teams : { ...teamQueryArgs } , wbsElement : true } } }
40+ include : {
41+ project : {
42+ include : { teams : { ...teamQueryArgs } , wbsElement : true , workPackages : { include : { wbsElement : true } } }
43+ }
44+ }
4145 } ) ;
4246 if ( ! requestedWbsElement ) throw new NotFoundException ( 'WBS Element' , wbsPipe ( wbsNum ) ) ;
4347 if ( requestedWbsElement . dateDeleted ) throw new DeletedException ( 'WBS Element' , wbsPipe ( wbsNum ) ) ;
@@ -51,7 +55,18 @@ export default class TasksService {
5155 const isProjectLeadOrManager =
5256 createdBy . userId === requestedWbsElement . projectLeadId || createdBy . userId === requestedWbsElement . projectManagerId ;
5357
54- if ( ! isLeadership ( createdBy . role ) && ! isProjectLeadOrManager && ! teams . some ( ( team ) => isUserOnTeam ( team , createdBy ) ) ) {
58+ const curWorkPackages = requestedWbsElement . project ?. workPackages ;
59+
60+ const isWorkPackageLead = curWorkPackages ?. some ( ( workPackage ) => {
61+ return workPackage . wbsElement . projectLeadId === createdBy . userId ;
62+ } ) ;
63+
64+ if (
65+ ! isLeadership ( createdBy . role ) &&
66+ ! isProjectLeadOrManager &&
67+ isWorkPackageLead &&
68+ ! teams . some ( ( team ) => isUserOnTeam ( team , createdBy ) )
69+ ) {
5570 throw new AccessDeniedException (
5671 'Only admins, app-admins, project leads, project managers, or current team users can create tasks'
5772 ) ;
0 commit comments