169 похожих чатов

Добрый день, ребят. Пробую потихоньку перейти на aiogram3. У меня есть

несколько ролей, для которых есть отдельные роутеры. То есть скажем для администратора и для клиента, команда start будет отрабатывать по разному.
Соответственно у них разные роутеры и разные handler'ы.

Как мне реализовать такое распределение по роутерам? Ориентируясь на гайд от Груши - нужно ли мне делать это через middleware, а после вешать его на роутер?

21 ответов

116 просмотров

Мне кажется, здесь правильно сделать outer middleware, в котором прокидывать в апдейт роль юзера, а на каждый роутер навесить фильтр, который будет пропускать только в случае совпадения роли

Андрей-🐍 Автор вопроса
Groosha
Мне кажется, здесь правильно сделать outer middlew...

Отлично! У меня была идея сделать именно так, но я завалился на 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 :)

Андрей 🐍
Речь про мою реализацию? Подскажи пожалуйста, как ...

Ну вон я тебе выше рассказал на словах. Кодом не могу, сорян, не у компа

Groosha
Мне кажется, здесь правильно сделать outer middlew...

а почему нельзя все через фильтр сделать?

Ilya Lyapin (Nestyreff)
а почему нельзя все через фильтр сделать?

Так тебе надо в разных роутерах одно и то же проверять. Проще же один раз мидлварью получить данные и прокинуть в кучу разных мест

Андрей-🐍 Автор вопроса
Groosha
Ну вон я тебе выше рассказал на словах. Кодом не м...

Ничего страшного, очень тебе благодарен. Сейчас попробую сам потыкать и разобраться.

Андрей-🐍 Автор вопроса
Groosha
Расскажи потом, пожалуйста, как успехи

Если это не сарказм, то без проблем :)

Андрей-🐍 Автор вопроса
Groosha
Не сарказм)

Мало ли. Здесь любят побуллить всяких ботоё...)

Андрей 🐍
Мало ли. Здесь любят побуллить всяких ботоё...)

Любят, и я тоже :) Но сейчас мне реально интересно. Может получиться хороший use-case

Андрей 🐍
Ничего страшного, очень тебе благодарен. Сейчас по...

Подсказали в соседнем чате: То, что ты прокинул через мидлварь (напр. data[“role”] = “govno”) В фильтре достаётся как аргумент функции (как в хэндлерах), то есть, аргумент role

Андрей-🐍 Автор вопроса

Я в __call__ в фильтре принял это как kwargs и оттуда дёргаю kwargs["role"].

А можно сразу как role

Андрей-🐍 Автор вопроса
Groosha
А можно сразу как role

Да-да, уже поправил :)

Groosha
Тут ещё и keyerror потенциальный

Там в целом тоже ошибка будет, если не будет роли в контексте, только другая)

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта