Skip to content

Роли и права доступа

Последняя сверка с кодом: 2026-06-06
Источник правды в коде: getEventAccess, eventRoleService, eventGuestAccessService, middleware


1. Роли (кратко)

РольКак получитьОбласть
GUESTБез логинаОдно событие по URL
MEMBERPOST /events/:id/join с invite tokenОдно событие
MODERATOROWNER добавляет email в membersОдно событие
OWNERСоздал событие или назначенОдно событие
SUPER_ADMINUser.globalRole в БДВся платформа

Платформенная роль User.globalRole: USER (обычный) или SUPER_ADMIN.


2. Матрица: страницы фронта

Действие / URLGUESTMEMBERMODERATOROWNERSUPER_ADMIN
/, /pricing
/:id альбом✅*✅*✅*✅*✅*
/:id/share, wall✅*✅*✅*✅*✅*
Upload в альбом✅*✅*✅*✅*✅*
Like
/account, /my-events
/profile
/:id/manage
/:id/members
/:id/moderate
/:id/settings
/admin/*

* Зависит от EventSettings.qrAccess (см. §4). При MEMBERS_ONLY / INVITE_ONLY нужен логин + роль на событии.


3. Матрица: API и контент

ДействиеGUESTMEMBERMODERATOROWNERSUPER_ADMIN
GET /events/:id✅*✅*✅*✅*✅*
GET /events/:id/media (album)✅*✅*✅*✅*✅*
TUS upload✅*✅*✅*✅*✅*
POST /media/:id/like
DELETE /media/:id чужое
DELETE /media/:id своё❌†
PATCH /media/:id/moderation
GET/PATCH /events/:id/settings✅‡
Members CRUD✅‡
POST /events (создать)✅§✅§✅§
GET /events/my
GET /admin/*

† SUPER_ADMIN: canDeleteOwnMedia: false в getEventAccess, но assertCanDeleteMedia для super admin разрешает удаление любого медиа.
‡ SUPER_ADMIN обходит проверки роли на событие через canAccessEvent.
§ Любой залогиненный USER; лимит по тарифу — отдельно (07-limits-and-plans).


4. EventSettings и доступ

ПолеЗначенияЧто ограничиваетEnforced в коде
qrAccessALL, MEMBERS_ONLY, INVITE_ONLYОткрытие альбома, upload, TUSassertQrAccess
albumVisibilityALL, MEMBERS_ONLY, OWNER_ONLYКто видит ленту🟡 UI + API поле; проверка в основном через qrAccess на list
zipAccessALL, MEMBERS_ONLY, OWNER_ONLYZIP скачиваниеassertDownloadAccess (+ downloadsEnabled)
likesEnabledboolЛайки на медиа
downloadsEnabledboolZIP и скачивание файлов
allowedMediaALL / PHOTOS_ONLY / VIDEOS_ONLYTUS (content filter)
moderationEnabledboolНовые файлы → PENDING
uploadEnabledboolTUS

Deferred (поле в БД, UI скрыт): albumVisibility, zipDailyLimit, allowMemberFolders — см. PLAN.md «Deferred settings».

ALL (qrAccess): гость без логина — как классический QR-альбом.
MEMBERS_ONLY / INVITE_ONLY: без логина → 401; без EventRole → 403.


5. Модерация медиа

moderationEnabledGUEST видит в albumПосле upload
falseТолько APPROVEDСразу APPROVED
trueТолько APPROVEDPENDING → moderate → APPROVED/REJECTED

MODERATOR и OWNER видят очередь PENDING в /:id/moderate и admin manage view.


6. Frontend guards

MiddlewareУсловиеПри отказе
authisLoggedInМодалка login + /
require-event-adminGET …/accesscanAdminInline UiPageError
require-event-ownerrole === OWNERInline UiPageError
require-super-adminglobalRole === SUPER_ADMINInline UiPageError

7. Ответ API GET /events/:id/access

json
{
  "canAdmin": true,
  "role": "OWNER",
  "canDeleteOwnMedia": false,
  "canLike": true,
  "canDownload": true
}
ПолеСмысл
canAdminДоступ к admin/members/moderate
roleOWNER / MODERATOR / MEMBER / SUPER_ADMIN / null
canDeleteOwnMediaMEMBER может удалять свои upload
canLikeМожно лайкать (MEMBER+ и likesEnabled)
canDownloadМожно скачивать (downloadsEnabled + zipAccess)

8. Типичные ошибки

HTTPCodeКогда
401UNAUTHORIZEDНет session; закрытое событие без логина
403FORBIDDENНет роли; plan limit; qrAccess
404EVENT_NOT_FOUNDНеверный event id

На фронте: UiPageError или toast, не редирект на /403.


9. Seed для проверки ролей

УчёткаРольСобытие
dev@local.test / dev123456OWNER + USERdemo-event

SUPER_ADMIN — вручную в БД или seed (см. 10-developer-setup).