LuckPerms/그룹 설계
이 문서는 LuckPerms에서 그룹 구조를 설계하는 방법을 다룬다. 명령 문법은 LuckPerms/명령어 문서를 참고한다.
권한 관리에서 문제가 생기는 원인은 대부분 개별 명령이 아니라 구조에 있다. 그룹이 늘어난 뒤에 구조를 바꾸는 일은 비용이 크므로, 초기에 원칙을 정해 두는 편이 낫다.
기본 원칙
사용자에게 직접 권한을 주지 않는다
가장 중요한 원칙이다. 개별 사용자에게 permission set으로 권한을 주기 시작하면, 시간이 지난 뒤 누가 왜 그 권한을 가졌는지 추적할 수 없게 된다.
권한은 그룹에 부여하고 사용자는 그룹에 넣는다. 예외적으로 개인에게 줘야 한다면 임시 권한(settemp)으로 만료 시점을 명시한다.
상속을 계단식으로 구성한다
같은 권한을 여러 그룹에 중복해서 적을 필요가 없다.
/lp creategroup builder /lp group builder parent add default /lp creategroup senior /lp group senior parent add builder
이렇게 하면 senior는 builder와 default의 권한을 모두 가진다. 공통 권한을 아래쪽 그룹에 모으면 수정할 지점이 하나로 줄어든다.
default 그룹을 비워 두지 않는다
모든 이용자가 속하는 default는 상속 구조의 바닥이다. 여기에 모든 이용자에게 허용할 최소 권한을 명시해 두면, 상위 그룹에서 같은 항목을 반복하지 않아도 된다.
컨텍스트 활용
컨텍스트를 쓰면 그룹 수를 크게 줄일 수 있다. 예를 들어 건축 월드에서만 편집 도구를 허용하려는 경우, 별도 그룹을 만드는 대신 컨텍스트를 붙인다.
/lp group builder permission set worldedit.* true world=build
"월드마다 그룹을 하나씩" 만드는 구조는 피한다. 월드가 늘어날 때마다 그룹이 배수로 늘어나며, 어느 그룹이 어디에 적용되는지 파악하기 어려워진다.
프록시 네트워크라면 server=로 서버별 차이를 표현한다. 로비에서는 이동 명령만, 건축 서버에서는 편집 도구를 허용하는 구성이 대표적이다.
접두사와 우선순위
접두사는 숫자 우선순위와 함께 지정한다. 여러 그룹에 접두사가 있으면 숫자가 큰 쪽이 표시된다.
/lp group default meta setprefix 10 "&7[주민] " /lp group builder meta setprefix 50 "&a[건축가] " /lp group admin meta setprefix 100 "&c[관리자] "
간격을 넉넉히 두면 나중에 중간 등급을 넣기 쉽다. 1, 2, 3으로 촘촘히 매기면 중간에 그룹을 추가할 때 전부 다시 매겨야 한다.
LuckPerms 자체는 채팅 형식을 바꾸지 않는다. 접두사를 실제로 표시하려면 이를 읽는 채팅 플러그인이나 PlaceholderAPI가 필요하다.
트랙
승급 체계가 있다면 트랙으로 묶는다.
/lp createtrack staff /lp track staff append helper /lp track staff append moderator /lp track staff append admin /lp user PlayerName promote staff
트랙을 쓰면 승급 시 이전 그룹에서 자동으로 빠지므로, 한 사람이 같은 계열의 여러 등급에 동시에 남는 실수를 막을 수 있다. parent add만 반복하면 이 문제가 생긴다.
흔한 설계 실수
| 실수 | 결과 | 대안 |
|---|---|---|
| 사용자에게 직접 권한 부여 | 추적 불가. 인수인계 시 파악 불능 | 그룹에 부여 |
| 월드마다 그룹 생성 | 그룹 수가 배수로 증가 | world= 컨텍스트
|
| 접두사 우선순위를 1, 2, 3으로 지정 | 중간 등급 추가 시 전면 재조정 | 10 단위로 간격 |
set false로 권한 회수 |
상속 구조가 복잡해짐 | unset
|
| 상속 없이 그룹마다 전체 권한 나열 | 수정 지점이 그룹 수만큼 증가 | 계단식 상속 |
parent add로만 승급 |
여러 등급에 동시 소속 | 트랙 사용 |
luckperms.*를 넓게 부여 |
권한 체계 자체를 바꿀 수 있게 됨 | 필요한 하위 노드만 |
설계 점검
구조를 바꾼 뒤에는 실제 판정 결과를 확인한다.
/lp user PlayerName info /lp user PlayerName permission check worldedit.selection.pos
의도와 다르면 LuckPerms/문제 해결 문서의 절차를 따른다.