8. Admin Quorum · Approval Group
Q / Q+O / AG 라벨의 영속화 + Owner counting rule + 7-day expiryAdmin Quorum
Workspace · Policy 변경의 다수결 승인 그룹. Owner / Admin / Non-Signing Admin / Security Admin 이 멤버 자격.
CREATE TABLE admin_quorums (
id BINARY(16) PRIMARY KEY,
workspace_id BINARY(16) NOT NULL UNIQUE, -- workspace 당 1개
threshold INT NOT NULL, -- N of M (Owner 포함 가능)
created_at DATETIME(6) NOT NULL,
changed_at DATETIME(6) NOT NULL, -- 변경은 Q+O
FOREIGN KEY (workspace_id) REFERENCES workspaces(id)
);
CREATE TABLE admin_quorum_members (
quorum_id BINARY(16) NOT NULL,
user_id BINARY(16) NOT NULL,
joined_at DATETIME(6) NOT NULL,
PRIMARY KEY (quorum_id, user_id),
FOREIGN KEY (quorum_id) REFERENCES admin_quorums(id),
FOREIGN KEY (user_id) REFERENCES users(id)
);
Owner Counting Rule
add-users.md, p.1 직접 인용 (Stage 2 ANSWERED)Q 또는 Q+O 흐름에서 Owner 의 승인은 mandatory 이며 threshold count 에 포함될 수 있다. 예: threshold 가 3 of 5 일 때:
- 2 Admins + Owner = 충족 (Owner 카운트 포함)
- 3 Admins = 미충족; Owner 의 추가 승인 전까지 거부
Approval Group (AG)
일부 작업을 Owner 없이도 가능하게 위임하는 별개 메커니즘. Settings > Quorums > Approval groups 에서 작업별로 Owner 요구 토글.
CREATE TABLE approval_groups (
id BINARY(16) PRIMARY KEY,
workspace_id BINARY(16) NOT NULL,
action VARCHAR(64) NOT NULL, -- 'delete_user', 'edit_user', ...
requires_owner BOOLEAN NOT NULL,
threshold INT NOT NULL,
FOREIGN KEY (workspace_id) REFERENCES workspaces(id)
);
CREATE TABLE approval_group_members (
group_id BINARY(16) NOT NULL,
user_id BINARY(16) NOT NULL,
PRIMARY KEY (group_id, user_id)
);
Add user 흐름의 7-day Expiry
Add user 승인은 mobile 로 Owner + Admin Quorum 에 전송. threshold 가 7일 안에 충족되지 않으면 request expire되어 사용자 추가 안 됨. approval_requests.expires_at 컬럼 + scheduled job 으로 강제.
Edit user 의 Customize
Edit user 는 Approval groups 로 흐름 customize 가능. 정확한 범위 (membership / threshold / Owner 요구 토글) 는 본 자료에 명시 없음.