Skip to content

Commit 82b1798

Browse files
committed
feat: 프로젝트 리더가 아닌 회원이 설정페이지를 접속시 웹소켓 연결을 끊도록 구현
- 프로젝트 리더인지 확인하는 서비스 구현 - 프로젝트 리더가 아닌 회원이 설정 페이지 접속시 웹소켓 연결 끊도록 구현 - 리더가 아닌 회원이 설정페이지 입장 하는 E2E 테스트 추가
1 parent de80778 commit 82b1798

File tree

3 files changed

+40
-0
lines changed

3 files changed

+40
-0
lines changed

backend/src/project/service/project.service.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,14 @@ export class ProjectService {
5959
return true;
6060
}
6161

62+
async isProjectLeader(project: Project, member: Member): Promise<boolean> {
63+
const projectToMember = await this.projectRepository.getProjectToMember(
64+
project,
65+
member,
66+
);
67+
return projectToMember?.role === MemberRole.LEADER;
68+
}
69+
6270
getProjectByLinkId(projectLinkId: string): Promise<Project | null> {
6371
return this.projectRepository.getProjectByLinkId(projectLinkId);
6472
}

backend/src/project/ws-controller/ws-project.controller.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,16 @@ export class WsProjectController {
6565
}
6666

6767
async joinSettingPage(client: ClientSocket) {
68+
if (
69+
!(await this.projectService.isProjectLeader(
70+
client.project,
71+
client.member,
72+
))
73+
) {
74+
client.disconnect(true);
75+
return;
76+
}
77+
6878
client.leave('landing');
6979
client.leave('backlog');
7080
client.join('setting');

backend/test/project/ws-setting-page/ws-project-landing-page.e2e-spec.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,26 @@ describe('WS Setting', () => {
7272
socket1.close();
7373
});
7474
});
75+
76+
it('Should close connection when member(not leader) enters setting page', async () => {
77+
let socket2: Socket;
78+
79+
return new Promise<void>(async (resolve) => {
80+
const accessToken1 = (await createMember(memberFixture, app)).accessToken;
81+
const project = await createProject(accessToken1, projectPayload, app);
82+
const projectLinkId = await getProjectLinkId(accessToken1, project.id);
83+
84+
const accessToken2 = (await createMember(memberFixture2, app))
85+
.accessToken;
86+
await joinProject(accessToken2, projectLinkId);
87+
88+
socket2 = connectServer(project.id, accessToken2);
89+
socket2.emit('joinSetting');
90+
socket2.on('disconnect', () => {
91+
resolve();
92+
});
93+
}).finally(() => {
94+
socket2.close();
95+
});
96+
});
7597
});

0 commit comments

Comments
 (0)