Skip to content

Commit 373df4e

Browse files
authored
Move edit departmentId permission check to policies (#3547)
This corrects to covey `canEdit` correctly. This does remove the impersonation introspection (check if the current user is actually an admin impersonating someone else), but that hasn't been needed, and is arguably a bad practice. FYI the check in create is still the same as this was before. We do actually use that in the monday sync. We don't actually check edit permission for any properties on create with the permission system. I think it is fine to stay how it is, because we don't expose UI for that. Related to: #3383
1 parent df07999 commit 373df4e

File tree

4 files changed

+6
-17
lines changed

4 files changed

+6
-17
lines changed

src/components/authorization/policies/by-role/field-operations-director.policy.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { Policy, Role } from '../util';
1313
]),
1414
r.Producible.edit.create,
1515
r.Product.edit.create.delete,
16-
r.Project.edit,
16+
r.Project.edit.specifically((p) => [p.departmentId.read]),
1717
r.ProjectMember.edit.create.delete,
1818
r.ProjectWorkflowEvent.read.transitions(
1919
'Field Ops Approves Proposal',

src/components/authorization/policies/by-role/project-manager.policy.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ export const momentumProjectsTransitions = () =>
160160
// Only allow until financial endorsement
161161
// field('step', stepsUntilFinancialEndorsement),
162162
).edit,
163+
p.departmentId.read,
163164
])
164165
.children((c) => c.posts.read.create),
165166
r.ProjectMember.read.when(member).edit.create.delete,

src/components/authorization/policies/by-role/regional-director.policy.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@ import * as PM from './project-manager.policy';
66
Role.assignable(r, [Role.ProjectManager]),
77

88
r.Partnership.read,
9-
r.Project.when(member).edit.specifically(
10-
(p) => p.rootDirectory.edit.when(sensMediumOrLower).read,
11-
),
9+
r.Project.when(member).edit.specifically((p) => [
10+
p.rootDirectory.edit.when(sensMediumOrLower).read,
11+
p.departmentId.read,
12+
]),
1213
r.ProjectWorkflowEvent.transitions(
1314
PM.projectTransitions,
1415
PM.momentumProjectsTransitions,

src/components/project/project.service.ts

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -250,19 +250,6 @@ export class ProjectService {
250250
'project.sensitivity',
251251
);
252252

253-
// Only allow admins to specify department IDs
254-
if (
255-
input.departmentId !== undefined &&
256-
!this.identity.isImpersonatorAdmin
257-
) {
258-
throw UnauthorizedException.fromPrivileges(
259-
'edit',
260-
undefined,
261-
EnhancedResource.of(IProject),
262-
'departmentId',
263-
);
264-
}
265-
266253
const changes = this.repo.getActualChanges(currentProject, input);
267254
this.privileges
268255
.for(resolveProjectType(currentProject), currentProject)

0 commit comments

Comments
 (0)