Роли и права
Система прав основана на битовых масках. Каждая роль содержит числовое поле permissions, в котором каждый бит соответствует определённому праву.
Список прав
Для комбинации прав используется побитовое ИЛИ. Например, права на чтение и отправку: 1 | 2 = 3.
Как определяются права пользователя
Проверяется канальное членство пользователя
Если у членства задан
roleId— используются права этой ролиИначе — используются права роли
@everyoneсервераПраво
ADMINISTRATORобходит все остальные проверки
Роль @everyone
Создаётся автоматически при создании сервера с правами по умолчанию:
SEND_MESSAGES | READ_MESSAGES | CONNECT_VOICE | SPEAK = 3075
Не может быть удалена.
Список ролей
GET /servers/{serverId}/roles
Ответ (200): массив RoleResponse.
[ { "id": "role-uuid", "name": "@everyone", "permissions": 3075, "position": 0 } ]
Создание роли
POST /servers/{serverId}/roles
Тело запроса:
{ "name": "Moderator", "permissions": 3139, "position": 1 }
Ответ (201): RoleResponse.
Ошибки: VALIDATION_ERROR (невалидное название), ALREADY_EXISTS (дубликат имени в сервере).
Обновление роли
PUT /servers/{serverId}/roles/{roleId}
Тело запроса:
{ "name": "Senior Moderator", "permissions": 3203, "position": 2 }
Все поля опциональны.
Ответ (200): обновлённый RoleResponse.
Ошибки: NOT_FOUND.
Удаление роли
DELETE /servers/{serverId}/roles/{roleId}
Роль @everyone не может быть удалена.
Ответ (200): SuccessResponse.
Ошибки: NOT_FOUND, FORBIDDEN (попытка удалить @everyone).
Назначение роли участнику
POST /servers/{serverId}/roles/assign
Тело запроса:
{ "channelId": "channel-uuid", "userId": "user-uuid", "federation": "https://auth.example.com", "roleId": "role-uuid" }
Ответ (200): SuccessResponse.
Ошибки: NOT_FOUND (роль или членство не найдены).