Доступ по ролям

В Raito встроена система ролей, чтобы закрывать команды по уровню доступа и не писать собственные проверки.

Встроенные роли

Девять ролей уже готовы. Импортируйте их из rt и применяйте как фильтры aiogram:

from aiogram import Router, filters, types
from raito import rt
from raito.rt import OWNER, ADMINISTRATOR, MODERATOR

router = Router(name="moderation")


@router.message(filters.Command("ban"), OWNER | ADMINISTRATOR | MODERATOR)
@rt.description("Ban a user")
@rt.params(user_id=int)
async def ban(message: types.Message, user_id: int, bot: Bot) -> None:
    await bot.ban_chat_member(chat_id=message.chat.id, user_id=user_id)
    await message.answer("✅ User banned")

Роль, использованная как фильтр, пропускает пользователя, только если он ею сейчас обладает. Объединяйте роли через | в значении «любая из перечисленных».

Полный список (OWNER, DEVELOPER, ADMINISTRATOR, MODERATOR, MANAGER, SPONSOR, GUEST, SUPPORT, TESTER) и способ завести свою роль смотрите в руководстве по ролям.

Разработчики

Передайте доверенные ID пользователей в developers при создании Raito. Они неявно получают роль developer, что удобно для себя во время разработки:

raito = Raito(dispatcher, "my_bot/handlers", developers=[123456789])

Назначение ролей на ходу

Роли хранит провайдер, выбранный по вашему FSM-хранилищу (по умолчанию в памяти; SQLite, PostgreSQL, Redis или JSON, если настроите). Пользователь с управляющей ролью может выдавать роли другим прямо из чата:

.rt roles      → opens a role picker, then asks for a user ID
.rt revoke     → removes a user's role
.rt staff      → lists everyone and their roles

Эти команды .rt входят в набор dev-инструментов Raito, подробнее в справочнике по командам.

Предупреждение

Пользователь с ролью developer может запускать .rt eval и .rt bash (произвольный код и shell), но только если бот запущен с Raito(..., enable_dangerous_commands=True). Держите этот флаг выключенным, пока не понимаете риск.

Вот основной цикл: файлы становятся роутерами, декораторы добавляют поведение, роли ограничивают доступ. Что дальше подскажет, что есть покрупнее.