← 목록

crowny-project v2.4 — 팀/공유/연락 + 실시간 + 권한 세분화

개요

TOAU 729 프로젝트 매니저(project.crowny.org:9730)에 4대 협업 기능 완성.

  1. 팀 계정 (법인체) — teams 테이블 + 팀 지갑 + 역할(owner/admin/member)
  2. 프로젝트 공유/이전 — shares 테이블 + 데이터복사/소유권이전 2모드
  3. 팀원 연락 — messages + contacts + 팁+메시지 동시전송
  4. 실시간 WebSocket 협업 — WS 인증, 개인 알림, 온라인 프레즌스

무엇을 했는가

A. 4대 기능 기본 구현

서버 테이블 추가:

API: UI: 사이드바 팀/메시지 목록, 모달 5종 (팀생성/팀상세/공유/이전/연락), 뱃지

B. 공유 권한 세분화 (보안)

projectPermission(pj, uname)owner | admin | write | read | null

hasPermission() 확장 — 멤버 역할 + 공유 권한 폴백으로 모든 기존 write 엔드포인트 자동 적용:

C. WebSocket 사용자 인증 + 개인 알림

D. 온라인 상태 실시간

E. 프로젝트 필터/정렬 (프론트엔드)

사이드바 툴바: 전체/내 것/팀/공유 필터 + 이름/생성일 정렬 토글

검증 결과 (curl 테스트)

[1] 공유 전 user2 접근         → HTTP 403                ✅
[2] read 권한 공유             → share id 반환           ✅
[3] 공유 후 user2 접근          → myPermission=read       ✅
[4] user2 PATCH (read)        → HTTP 403 "관리자 이상"    ✅
[5] admin 권한 업그레이드       → ok                      ✅
[6] user2 PATCH 재시도         → HTTP 200                ✅
[7] /api/presence             → {"online":[]}           ✅

관련 파일

  • /Users/ef/crowny-project/server.js (4200+ 줄)
  • projectPermission(), permAtLeast(), canReadProject() — 427 부근
  • hasPermission() 확장 — 1162 부근
  • /api/projects/:id GET 권한 체크 — 3267 부근
  • WS upgrade 인증 + onlineUsers — 4093 부근
  • notify() + wsPushUser() — 4214 부근
  • /Users/ef/crowny-project/public/js/app.js (2300+ 줄)
  • loadProjects() 필터/정렬 툴바 — 213 부근
  • connectWS() 토큰 포함 — 427 부근
  • handleWSEvent() presence/message/notification — 461 부근
  • 잔여 이슈

    다음 세션 참고