feat(web): разделы «Баны» и «Журнал аудита» в настройках сервера
Фаза 4 (AGENT.md 7.17, 7.18): модерация из интерфейса. - `api/moderation.ts`: список банов, бан, разбан, тайм-аут, кик и журнал аудита с фильтрами; - «Баны»: причина и автор каждого бана, снятие бана и пресеты тайм-аута (1/5/10/60/1440 минут) прямо из списка; ответ сервера обновляет кэш, поэтому строка исчезает без перезагрузки; - «Журнал аудита»: фильтры по действию, автору и цели уходят в запрос, кнопки «Показать» и «Сбросить»; - секции видны только с правами BAN_MEMBERS и VIEW_AUDIT_LOG (`canBanMembers`, `canViewAuditLog`); - тесты: список с причиной и автором, снятие бана с обновлением списка, тайм-аут с проверкой времени, скрытие секций без прав, фильтры в запросе.
This commit is contained in:
@@ -42,6 +42,8 @@ export const PERMISSION_MANAGE_CHANNELS = 'MANAGE_CHANNELS';
|
||||
export const PERMISSION_MANAGE_MESSAGES = 'MANAGE_MESSAGES';
|
||||
export const PERMISSION_MANAGE_EMOJIS = 'MANAGE_EMOJIS';
|
||||
export const PERMISSION_MANAGE_SOUNDS = 'MANAGE_SOUNDS';
|
||||
export const PERMISSION_BAN_MEMBERS = 'BAN_MEMBERS';
|
||||
export const PERMISSION_VIEW_AUDIT_LOG = 'VIEW_AUDIT_LOG';
|
||||
export const PERMISSION_USE_SOUNDBOARD = 'USE_SOUNDBOARD';
|
||||
export const PERMISSION_SEND_MESSAGES = 'SEND_MESSAGES';
|
||||
export const PERMISSION_ATTACH_FILES = 'ATTACH_FILES';
|
||||
@@ -188,6 +190,44 @@ export function canManageEmojis(
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Может ли пользователь банить участников (AGENT.md 7.17): владелец,
|
||||
* ADMINISTRATOR, BAN_MEMBERS или администратор инстанса.
|
||||
*/
|
||||
export function canBanMembers(
|
||||
permissions: readonly string[],
|
||||
ownerId: string,
|
||||
userId: string | undefined,
|
||||
isInstanceAdmin = false,
|
||||
): boolean {
|
||||
if (isInstanceAdmin || (userId !== undefined && userId === ownerId)) {
|
||||
return true;
|
||||
}
|
||||
return (
|
||||
hasPermission(permissions, PERMISSION_ADMINISTRATOR) ||
|
||||
hasPermission(permissions, PERMISSION_BAN_MEMBERS)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Может ли пользователь смотреть журнал аудита (AGENT.md 7.18): владелец,
|
||||
* ADMINISTRATOR, VIEW_AUDIT_LOG или администратор инстанса.
|
||||
*/
|
||||
export function canViewAuditLog(
|
||||
permissions: readonly string[],
|
||||
ownerId: string,
|
||||
userId: string | undefined,
|
||||
isInstanceAdmin = false,
|
||||
): boolean {
|
||||
if (isInstanceAdmin || (userId !== undefined && userId === ownerId)) {
|
||||
return true;
|
||||
}
|
||||
return (
|
||||
hasPermission(permissions, PERMISSION_ADMINISTRATOR) ||
|
||||
hasPermission(permissions, PERMISSION_VIEW_AUDIT_LOG)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Может ли пользователь управлять звуками сервера (AGENT.md 7.13): владелец,
|
||||
* ADMINISTRATOR, MANAGE_SOUNDS или администратор инстанса.
|
||||
|
||||
Reference in New Issue
Block a user