Skip to content

Commit 45b5f3a

Browse files
authored
Merge pull request #22 from topcoder-platform/PM-4988
PM-4988: Restrict project edit permissions for copilots
2 parents 02651ce + d993431 commit 45b5f3a

4 files changed

Lines changed: 28 additions & 7 deletions

File tree

src/shared/constants/permissions.constants.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -265,11 +265,7 @@ export const PERMISSION = {
265265
'There are additional limitations on editing some parts of the project.',
266266
},
267267
topcoderRoles: TOPCODER_ROLES_MANAGERS_AND_ADMINS,
268-
projectRoles: [
269-
...PROJECT_ROLES_MANAGEMENT,
270-
PROJECT_MEMBER_ROLE.COPILOT,
271-
PROJECT_MEMBER_ROLE.CUSTOMER,
272-
],
268+
projectRoles: PROJECT_ROLES_MANAGEMENT,
273269
scopes: SCOPES_PROJECTS_WRITE,
274270
},
275271

src/shared/services/permission.service.spec.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { ProjectMemberRole } from '../enums/projectMemberRole.enum';
22
import { Scope } from '../enums/scopes.enum';
33
import { UserRole } from '../enums/userRole.enum';
44
import { Permission } from '../constants/permissions';
5+
import { PERMISSION } from '../constants/permissions.constants';
56
import { PermissionService } from './permission.service';
67

78
describe('PermissionService', () => {
@@ -722,6 +723,31 @@ describe('PermissionService', () => {
722723
expect(allowed).toBe(true);
723724
});
724725

726+
it('blocks project copilots from editing project details', () => {
727+
const user = {
728+
userId: '3001',
729+
roles: [UserRole.TC_COPILOT],
730+
isMachine: false,
731+
};
732+
const projectMembers = [
733+
{
734+
userId: '3001',
735+
role: ProjectMemberRole.COPILOT,
736+
},
737+
];
738+
739+
expect(
740+
service.hasNamedPermission(
741+
Permission.EDIT_PROJECT,
742+
user,
743+
projectMembers,
744+
),
745+
).toBe(false);
746+
expect(
747+
service.matchPermissionRule(PERMISSION.UPDATE_PROJECT, user, projectMembers),
748+
).toBe(false);
749+
});
750+
725751
it('allows deleting project for machine token with project write scope', () => {
726752
const allowed = service.hasNamedPermission(Permission.DELETE_PROJECT, {
727753
scopes: [Scope.PROJECTS_ALL],

src/shared/services/permission.service.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,6 @@ export class PermissionService {
271271
return (
272272
isAdmin ||
273273
isManagementMember ||
274-
this.isCopilot(member?.role) ||
275274
this.hasProjectUpdateTopcoderRole(user) ||
276275
hasMachineProjectWriteScope
277276
);

src/shared/utils/permission-docs.utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ function getNamedPermissionDocumentation(
255255
case NamedPermission.EDIT_PROJECT:
256256
return createSummary({
257257
userRoles: PROJECT_UPDATE_TOPCODER_ROLES,
258-
projectRoles: PROJECT_MEMBER_MANAGEMENT_AND_COPILOT_ROLES,
258+
projectRoles: PROJECT_MEMBER_MANAGEMENT_ROLES,
259259
scopes: PROJECT_WRITE_SCOPES,
260260
});
261261

0 commit comments

Comments
 (0)