несколько ролей, для которых есть отдельные роутеры. То есть скажем для администратора и для клиента, команда start будет отрабатывать по разному.
Соответственно у них разные роутеры и разные handler'ы.
Как мне реализовать такое распределение по роутерам? Ориентируясь на гайд от Груши - нужно ли мне делать это через middleware, а после вешать его на роутер?
Мне кажется, здесь правильно сделать outer middleware, в котором прокидывать в апдейт роль юзера, а на каждый роутер навесить фильтр, который будет пропускать только в случае совпадения роли
Отлично! У меня была идея сделать именно так, но я завалился на middleware. Я пытался повесить два middleware на два router'а, это выглядело примерно так: admin_router.message.middleware(FromAdminsMessageMiddleware()) client_router.message.middleware(FromClientMessageMiddleware()) dp.include_router(client_router) dp.include_router(admin_router) В таком случае, проверка будет проходить только на первом router'e, то есть до второго middleware вообще не доходит событие.
Мидлварь тебе надо повесить на диспетчер (т.е. на корневой роутер)
Речь про мою реализацию? Подскажи пожалуйста, как я могу это сделать? Сильно удивился, как много всего изменили в aiogram3 :)
Ну вон я тебе выше рассказал на словах. Кодом не могу, сорян, не у компа
а почему нельзя все через фильтр сделать?
Так тебе надо в разных роутерах одно и то же проверять. Проще же один раз мидлварью получить данные и прокинуть в кучу разных мест
Ничего страшного, очень тебе благодарен. Сейчас попробую сам потыкать и разобраться.
Расскажи потом, пожалуйста, как успехи
Если это не сарказм, то без проблем :)
Мало ли. Здесь любят побуллить всяких ботоё...)
Любят, и я тоже :) Но сейчас мне реально интересно. Может получиться хороший use-case
таки да, без миддлваря говно будет
Подсказали в соседнем чате: То, что ты прокинул через мидлварь (напр. data[“role”] = “govno”) В фильтре достаётся как аргумент функции (как в хэндлерах), то есть, аргумент role
Я в __call__ в фильтре принял это как kwargs и оттуда дёргаю kwargs["role"].
А можно сразу как role
Да-да, уже поправил :)
Тут ещё и keyerror потенциальный
Там в целом тоже ошибка будет, если не будет роли в контексте, только другая)
Обсуждают сегодня