Skip to content

Commit

Permalink
feat: 프로젝트 리더가 아닌 회원이 설정페이지를 접속시 웹소켓 연결을 끊도록 구현
Browse files Browse the repository at this point in the history
- 프로젝트 리더인지 확인하는 서비스 구현
- 프로젝트 리더가 아닌 회원이 설정 페이지 접속시 웹소켓 연결 끊도록 구현
- 리더가 아닌 회원이 설정페이지 입장 하는 E2E 테스트 추가
  • Loading branch information
choyoungwoo9 committed Sep 11, 2024
1 parent de80778 commit 82b1798
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 0 deletions.
8 changes: 8 additions & 0 deletions backend/src/project/service/project.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,14 @@ export class ProjectService {
return true;
}

async isProjectLeader(project: Project, member: Member): Promise<boolean> {
const projectToMember = await this.projectRepository.getProjectToMember(
project,
member,
);
return projectToMember?.role === MemberRole.LEADER;
}

getProjectByLinkId(projectLinkId: string): Promise<Project | null> {
return this.projectRepository.getProjectByLinkId(projectLinkId);
}
Expand Down
10 changes: 10 additions & 0 deletions backend/src/project/ws-controller/ws-project.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,16 @@ export class WsProjectController {
}

async joinSettingPage(client: ClientSocket) {
if (
!(await this.projectService.isProjectLeader(
client.project,
client.member,
))
) {
client.disconnect(true);
return;
}

client.leave('landing');
client.leave('backlog');
client.join('setting');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,4 +72,26 @@ describe('WS Setting', () => {
socket1.close();
});
});

it('Should close connection when member(not leader) enters setting page', async () => {
let socket2: Socket;

return new Promise<void>(async (resolve) => {
const accessToken1 = (await createMember(memberFixture, app)).accessToken;
const project = await createProject(accessToken1, projectPayload, app);
const projectLinkId = await getProjectLinkId(accessToken1, project.id);

const accessToken2 = (await createMember(memberFixture2, app))
.accessToken;
await joinProject(accessToken2, projectLinkId);

socket2 = connectServer(project.id, accessToken2);
socket2.emit('joinSetting');
socket2.on('disconnect', () => {
resolve();
});
}).finally(() => {
socket2.close();
});
});
});

0 comments on commit 82b1798

Please sign in to comment.