refactor: purge legacy server_members.role column, single source of truth via member_roles
Remove the legacy TEXT role column ('owner'/'admin'/'member') from
server_members and make the bitwise RBAC member_roles junction table
the sole authority for role assignments. Owner detection now uses
servers.ownerId exclusively.
- Remove MemberRole type and role field from shared types
- Remove role from Drizzle schema, raw SQL CREATE TABLE, and seed data
- Rewrite PATCH /members/:uid to accept { roleIds: string[] }
- Fix GET /members to populate roles array (was TODO)
- Replace member.role === 'owner' guard with isServerOwner()
- Remove getMemberRole() helper and legacy bridge code
- MemberSidebar groups by highest-positioned role instead of legacy string
- ServerSettings replaces admin/member dropdown with role checkboxes
- Message.tsx derives color from roles[] with owner fallback via ownerId
- Existing DBs keep vestigial column (Drizzle ignores it); new DBs omit it
This commit is contained in:
@@ -36,12 +36,9 @@ export interface ServerWithChannelsAndMembers extends Server {
|
||||
|
||||
// ─── Member Types ───────────────────────────────────────────────────────────
|
||||
|
||||
export type MemberRole = 'owner' | 'admin' | 'member';
|
||||
|
||||
export interface Member {
|
||||
serverId: string;
|
||||
userId: string;
|
||||
role: MemberRole;
|
||||
nickname: string | null;
|
||||
joinedAt: number;
|
||||
}
|
||||
@@ -288,7 +285,7 @@ export interface UpdateUserRequest {
|
||||
}
|
||||
|
||||
export interface UpdateMemberRequest {
|
||||
role: MemberRole;
|
||||
roleIds: string[];
|
||||
}
|
||||
|
||||
export interface CreateMessageRequest {
|
||||
|
||||
Reference in New Issue
Block a user