Add access control rework
This commit is contained in:
44
toju-app/src/app/shared-kernel/access-control.models.ts
Normal file
44
toju-app/src/app/shared-kernel/access-control.models.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
export const ROOM_PERMISSION_KEYS = [
|
||||
'manageServer',
|
||||
'manageRoles',
|
||||
'manageChannels',
|
||||
'manageIcon',
|
||||
'kickMembers',
|
||||
'banMembers',
|
||||
'manageBans',
|
||||
'deleteMessages',
|
||||
'joinVoice',
|
||||
'shareScreen',
|
||||
'uploadFiles'
|
||||
] as const;
|
||||
|
||||
export type RoomPermissionKey = typeof ROOM_PERMISSION_KEYS[number];
|
||||
|
||||
export type PermissionState = 'allow' | 'deny' | 'inherit';
|
||||
|
||||
export type ChannelPermissionTargetType = 'role' | 'user';
|
||||
|
||||
export type RoomPermissionMatrix = Partial<Record<RoomPermissionKey, PermissionState>>;
|
||||
|
||||
export interface RoomRole {
|
||||
id: string;
|
||||
name: string;
|
||||
color?: string;
|
||||
position: number;
|
||||
isSystem?: boolean;
|
||||
permissions?: RoomPermissionMatrix;
|
||||
}
|
||||
|
||||
export interface RoomRoleAssignment {
|
||||
userId: string;
|
||||
oderId?: string;
|
||||
roleIds: string[];
|
||||
}
|
||||
|
||||
export interface ChannelPermissionOverride {
|
||||
channelId: string;
|
||||
targetType: ChannelPermissionTargetType;
|
||||
targetId: string;
|
||||
permission: RoomPermissionKey;
|
||||
value: PermissionState;
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
export * from './user.models';
|
||||
export * from './room.models';
|
||||
export * from './access-control.models';
|
||||
export * from './message.models';
|
||||
export * from './moderation.models';
|
||||
export * from './voice-state.models';
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
import type { RoomMember } from './user.models';
|
||||
import type {
|
||||
ChannelPermissionOverride,
|
||||
RoomRole,
|
||||
RoomRoleAssignment
|
||||
} from './access-control.models';
|
||||
|
||||
export type ChannelType = 'text' | 'voice';
|
||||
|
||||
@@ -23,9 +28,13 @@ export interface Room {
|
||||
maxUsers?: number;
|
||||
icon?: string;
|
||||
iconUpdatedAt?: number;
|
||||
slowModeInterval?: number;
|
||||
permissions?: RoomPermissions;
|
||||
channels?: Channel[];
|
||||
members?: RoomMember[];
|
||||
roles?: RoomRole[];
|
||||
roleAssignments?: RoomRoleAssignment[];
|
||||
channelPermissions?: ChannelPermissionOverride[];
|
||||
sourceId?: string;
|
||||
sourceName?: string;
|
||||
sourceUrl?: string;
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
import type { CameraState, VoiceState, ScreenShareState } from './voice-state.models';
|
||||
import type {
|
||||
CameraState,
|
||||
VoiceState,
|
||||
ScreenShareState
|
||||
} from './voice-state.models';
|
||||
|
||||
export type UserStatus = 'online' | 'away' | 'busy' | 'offline';
|
||||
|
||||
@@ -29,6 +33,7 @@ export interface RoomMember {
|
||||
displayName: string;
|
||||
avatarUrl?: string;
|
||||
role: UserRole;
|
||||
roleIds?: string[];
|
||||
joinedAt: number;
|
||||
lastSeenAt: number;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user