@@ -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,9 +55,23 @@ 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 = project . workPackages ;
59+
60+ const isWorkPackageLeadOrManager = curWorkPackages . some ( ( workPackage ) => {
61+ return (
62+ workPackage . wbsElement . projectLeadId === createdBy . userId ||
63+ workPackage . wbsElement . projectManagerId === createdBy . userId
64+ ) ;
65+ } ) ;
66+
67+ if (
68+ ! isLeadership ( createdBy . role ) &&
69+ ! isProjectLeadOrManager &&
70+ ! isWorkPackageLeadOrManager &&
71+ ! teams . some ( ( team ) => isUserOnTeam ( team , createdBy ) )
72+ ) {
5573 throw new AccessDeniedException (
56- 'Only admins, app-admins, project leads, project managers, or current team users can create tasks'
74+ 'Only admins, app-admins, project leads, project managers, work package leads, work package managers, or current team users can create tasks'
5775 ) ;
5876 }
5977
0 commit comments