식별된 ROLE ---------- * 그룹 멤버 = 그룹 관리자 + 그룹 참여자 * 그룹 관리자(Group Manager) : 그룹 관리자로 등록된 사용자 * 그룹 참여자(Group Participant) * 프로젝트 멤버 = 프로젝트 관리자 + 프로젝트 참여자 * 프로젝트 소유자(Project Owner) : 프로젝트를 생성한 사용자 또는 프로젝트를 이관받은 사용자 * 프로젝트 관리자(Project Manager) : 프로젝트 관리자 권한을 부여 받은 사용자 + 프로젝트 소유자 * 프로젝트 참여자(Project Participant) * 사용자(User) : Yobi에 접속한 모든 사람 * 로그인 사용자(Guest) : 로그인한 사용자 * 익명 사용자(Anonymous) : 로그인하지 않은 사용자 정의 --- * 그룹 페이지 : 어떤 그룹에 속한 프로젝트와 멤버를 한 번에 볼 수 있는 페이지 Group ----- * 그룹 생성 * 로그인한 사용자는 그룹을 만들 수 있다. * 그룹 삭제 * 그룹 관리자는 자신이 관리자인 그룹을 삭제할 수 있다. * 그룹이 소유하고 있는 프로젝트가 있다면 삭제할 수 없다. * 그룹이 소유하고 있는 모든 프로젝트를 이관/삭제하여 그룹이 소유하고 있는 프로젝트가 전혀 없을 때 삭제 가능하다. * 그룹이 삭제되어도 그룹이 소유한 프로젝트의 멤버 구성에는 변함이 없다. * 사용자가 할 수 있는 일 * 사용자는 그룹 페이지를 볼 수 있다. * 사용자는 그룹의 모든 멤버 리스트를 볼 수 있다. * 사용자는 자신이 멤버로 등록된 그룹의 리스트를 볼 수 있다. * 그룹 관리자가 할 수 있는 일 * 그룹 관리자는 자신이 관리자인 그룹의 프로젝트를 생성/삭제할 수 있다. * 그룹 관리자는 자신이 관리자인 그룹의 모든 프로젝트에서 프로젝트 관리자 역할을 수행할 수 있다. * 프로젝트 멤버는 관리자, 참여자 두 개만 존재하지만 그룹이 소유한 프로젝트에서는 그룹 관리자라는 새로운 롤이 생기고 해당 롤은 해당 프로젝트의 관리자 롤과 동일한 기능을 수행할 수 있다. * 그룹 참여자는 자신이 참여자인 그룹의 모든 protected 프로젝트에서 프로젝트 참여자 역할을 수행할 수 있다. * 프로젝트 멤버는 관리자, 참여자 두 개만 존재하지만 그룹이 소유한 protected 프로젝트에서는 그룹 참여자라는 새로운 롤이 생기고 해당 롤은 해당 프로젝트의 참여자 롤과 동일한 기능을 수행할 수 있다. * 그룹 관리자는 자신이 그룹 관리자인 그룹에 자신 이외의 관리자를 추가할 수 있다. * 따라서 하나의 그룹은 그룹 관리자가 두 명 이상이 될 수 있다. * 그룹 관리자는 그룹에 멤버를 추가/삭제를 할 수 있다. * 멤버들을 특정 그룹으로 묶어서 편하게 보기 위해서. * 특정 프로젝트는 해당 그룹의 멤버들만 접근 가능 하게 만들기 위해서. * 그룹 멤버가 할 수 있는 일 * 그룹 멤버는 자신이 속한 그룹에서 탈퇴할 수 있다. * 검색 * 사용자는 그룹을 찾기 위해 그룹 이름으로 검색할 수 있다. Project ------- * 생성 * 로그인 사용자는 프로젝트 생성 시에 프로젝트를 자신이 그룹 관리자인 그룹에 추가할 수 있다. * 로그인 사용자는 프로젝트 생성 시에 프로젝트를 자신에게 추가할 수 있다. * 공개 설정 * 프로젝트 관리자는 프로젝트의 공개 설정을 private, protected, public 중 하나로 설정 할 수 있다. * 각 설명은 Rule 참조. * 개인이 소유한 프로젝트 이관 * 프로젝트 소유자는 자신이 소유하고 있는 프로젝트를 다른 사용자에게 이관할 수 있다. * 프로젝트 소유자는 자신이 소유하고 있는 프로젝트를 어떤 그룹으로 이관할 수 있다. * 프로젝트 소유자는 자신이 소유하고 있는 프로젝트를 이관시킨 후 그 프로젝트의 관리자가 된다. * 그룹이 소유한 프로젝트 이관 * 그룹 관리자는 자신이 그룹 관리자인 그룹의 프로젝트를 사용자에게 이관할 수 있다. * 그룹 관리자는 자신이 그룹 관리자인 그룹의 프로젝트를 다른 그룹으로 이관할 수 있다. * 그룹 관리자는 자신이 그룹 관리자인 그룹의 프로젝트를 이관시킨 후 그 프로젝트의 관리자가 된다. Rule ---- * 사용자가 그룹 멤버일 경우 그룹 페이지에서 볼 수 있는 프로젝트 | | Private Project | Protected Project | Public Project | | ----------------- | --------------- | ----------------- | -------------- | | Project Member | O | O | O | | Group Manager | O | O | O | | Group Participant | X | O | O | * 사용자가 그룹 멤버가 아닐 경우 그룹 페이지에서 볼 수 있는 프로젝트 | | Private Project | Protected Project | Public Project | | ----------------- | --------------- | ----------------- | -------------- | | Project Member | O | O | O | | Guest | X | X | O | | Anonymous | X | X | O | * 프로젝트 목록을 볼 수 있는 프로젝트 | | Private Project | Protected Project | Public Project | | ----------------- | --------------- | ----------------- | -------------- | | Project Member | O | O | O | | Group Manager | O | O | O | | Group Participant | X | O | O | | Guest | X | X | O | | Anonymous | X | X | O | * 각 프로젝트에서 할 수 있는 일 * 그룹 멤버 여부와 상관없이 프로젝트에 어떤 권한을 가지고 있는지에 따라 할 수 있는 일이 결정된다. * 그룹 관리자는 그룹에 속한 프로젝트의 관리자로 등록되기 때문에 프로젝트 관리자 역할을 할 수 있다. * 그룹 참여자는 protected 프로젝트의 참여자와 동등한 권한을 갖기 때문에 프로젝트 참여자 역할을 할 수 있다. 추가됐으면 하는 기능 --------------- * 그룹 아바타 * Mention * 그룹 이름으로 멘션 가능? * 그룹 멤버가 아닌 사용자에게도 그룹 이름으로 멘션 가능? * 프로젝트 이름으로 멘션 가능? * 멤버추가 * 프로젝트 관리자는 그룹을 프로젝트 멤버로 추가 할 수 있다. * 이때 그룹 관리자를 추가할지, 그룹 멤버를 추가할지 선택 가능하다. * 그룹 페이지 * 그룹 멤버는 하위 프로젝트에 대한 이슈 목록을 모아 볼 수 있다. * 그룹 멤버는 하위 프로젝트에 대한 마일스톤 목록을 모아 볼 수 있다. * 그룹 멤버는 하위 프로젝트에 대한 코드 주고받기 목록을 볼 수 있다. * 그룹 멤버는 하위 프로젝트에 대한 대쉬보드를 볼 수 있다. * 일별로 추가된 이슈와 해결된 이슈를 표현하는 그래프. * 사람 별 이슈를 얼마나 처리했는지 알 수 있는 그래프. * 일별 LOC 그래프. * 일별로 얼마나 커밋 됐는지 알 수 있는 그래프.