Skip to content

Commit deb9ebe

Browse files
committed
#1096 work package leads can create tasks
1 parent a9a7f33 commit deb9ebe

3 files changed

Lines changed: 26 additions & 3 deletions

File tree

.vscode/settings.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,8 @@
2121
"editor.defaultFormatter": "Prisma.prisma"
2222
},
2323
"editor.formatOnSave": true,
24-
"typescript.tsdk": "node_modules/typescript/lib"
24+
"typescript.tsdk": "node_modules/typescript/lib",
25+
"githubPullRequests.ignoredPullRequestBranches": [
26+
"develop"
27+
]
2528
}

src/backend/src/services/tasks.services.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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
);

src/frontend/src/pages/ProjectDetailPage/ProjectViewContainer/TaskList/TaskList.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,14 @@ const TaskList = ({ project }: TaskListProps) => {
6666
const { user } = auth;
6767
if (!user) return <LoadingIndicator />;
6868

69+
const isWorkPackageLead = project.workPackages.some((workPackage) => {
70+
return workPackage.projectLead?.userId === user.userId;
71+
});
72+
6973
const createTaskPermissions =
7074
isLeadership(user.role) ||
7175
project.projectLead?.userId === user.userId ||
76+
isWorkPackageLead ||
7277
project.projectManager?.userId === user.userId ||
7378
project.teams.some((team) => team.head.userId === user.userId) ||
7479
project.teams.some((team) => team.leads.map((lead) => lead.userId).includes(user.userId));

0 commit comments

Comments
 (0)