Skip to content

Привілеї ​

Рольова модель адмінського доступу. Працює однаково на обох дата-провайдерах: json зберігає помічників з їхніми привілеями так само, як sql.

Дві ролі ​

Супер-адмін — облікові дані з ADMIN_LOGIN і ADMIN_PASS у server/.env. Проходить будь-яку перевірку привілеїв незалежно від списку.

Помічники — створюються супер-адміном, спершу неавторизовані, активують себе тимчасовим паролем. Мають лише явно видані привілеї. Зміни застосовуються без повторного входу.

Як перевіряються ​

У HTTP-роутах привілей стоїть мідлваром одразу після автентифікації:

js
router.post('/switch-mode',
  requireAdmin,
  requirePrivilege(PRIVILEGES.MODE_SWITCH),
  handler);

Частина перевірок живе на рівні Socket.io (socket/context.js) — саме так працюють RADIO_HOST і RADIO_MODERATOR, тому в таблиці нижче в них нуль HTTP-ендпоінтів.

Усього привілеїв: 14

ПривілейЗначенняЗахищає ендпоінтів
QUEUE_MANAGEqueue_manage1
ARTIST_ARTSartist_arts4
UPLOAD_SONGSupload_songs10
EDITOR_LYRICSeditor_lyrics9
EDITOR_METAeditor_meta14
SETTINGS_BRANDINGsettings_branding0
SETTINGS_GROUPSsettings_groups4
SETTINGS_ALGORITHMsettings_algorithm0
STATSstats2
MODE_SWITCHmode_switch1
JINGLES_UPLOADERjingles_uploader21
RADIO_HOSTradio_host0
RADIO_MODERATORradio_moderator0
DONATIONS_MANAGEdonations_manage3

Таблиця рахує лише HTTP-ендпоінти. Частина привілеїв — насамперед RADIO_HOST і RADIO_MODERATOR — перевіряється ще й на рівні Socket.io (socket/context.js), тож нуль у колонці не означає, що привілей не діє.

Посекційна перевірка на POST /api/admin/settings ​

Один ендпоінт записує три групи налаштувань, які керуються різними привілеями:

Секція тіла запитуПривілейЩо містить
brandingSETTINGS_BRANDINGназви радіо, посилання
generationSETTINGS_ALGORITHMтривалості, режим, групи жанрів
radioHostsRADIO_MODERATORліміти гостей і спецгостей

Авторизація йде за тим, що реально змінюється, а не за тим, що надіслано. Причина в тому, що адмінка завжди шле всі секції одразу, навіть ті, які поточний адмін не редагував — тож сама присутність секції нічого не означає.

Сервер прогонить вхідні дані й поточний стан через один і той самий конвеєр валідації та порівнює результат: якщо секція після нормалізації збігається, привілей на неї не потрібен. Це означає, що перетворення одиниць, обрізання пробілів чи інший порядок ключів ніколи не виглядають як правка.

Якщо змінюється секція, на яку немає прав, запит відхиляється з 403 цілком — частково зберегти не вийде. Секції, що змінилися, пишуться в журнал аудиту.

Для авторів власної адмінки

songGroups у цьому запиті ігнорується: групи пісень редагуються окремими ендпоінтами /api/admin/song-groups під привілеєм SETTINGS_GROUPS.