DEV: Промежуточное ПО (middleware)
Промежуточное ПО (middleware) позволяет вставлять новые функции между обработкой запросов фреймворка и обработчиком вашего контроллера — отсюда и термин «промежуточное ПО».
Почему не в контроллерах?
Несколько причин:
-
Скорее всего, мы захотим, чтобы они выполнялись по многим (или по каждому) запросу. Таким образом, нам придется дублировать это в каждом контроллере.
-
Даже если для этого мы вызовем какой-либо другой объект, каждый контроллер все равно будет зависеть от этого объекта. Таким образом, промежуточное ПО избавляет от необходимости давать контроллерам множество зависимостей.
-
Контроллер не должен делать слишком много — он должен быть тонким. Когда контроллер начинает участвовать во многих других вещах, он становится более хрупким и сложным в обслуживании.
-
Промежуточное ПО позволяет использовать новые функции без изменения существующего кода и т.д.
Далее.
Сейчас используются уровни доверия для участников (TL) и придется взяться и за них. Сейчас уровень доверия начинается с 0 и может достигать 5 (администратор).
Возможно, что следуют слегка сдвинуть шкалу. Один из вариантов, когда пользователь успешно регистрируется, он получает сразу TL1
. Т.е. фактически новички будут начинать с 1
, а не с нуля, ИМХО, это более верно. Администратор будет иметь TL10
(было 5).
TL0
мы оставим для заморозки. Пользователь с TL0
могут находиться на сайте, но не смогут совершать активных действий (писать посты, отвечать в комментариях и т.д.). Перевод в TL0 редкий случай.
TL -1
и -2
(вводятся отрицательные значения) будут использованы для бана и т.д.
*Ближе к следующему обновлению, напишу более подробно…
Зачем это делать?
код будет чище, это будет работать быстрее, значительно упростятся шаблоны и главное, в правах должна быть более понятная картина.
Мне очень понравилось, как это сделано в библ. HLOGIN, которая расширяет возможности фреймворка HLEB:
Пример реализации, если смотреть от маршрутов:
Route::before('Hlogin\Registrar', [RegType::REGISTERED_COMANDANTE, '='])->getGroup();
// Маршруты в этой группе будут доступны только администраторам.
Route::endGroup();
Route::before('Hlogin\Registrar', [RegType::UNDEFINED_USER, '>='])->getGroup();
// Маршруты в этой группе будут доступны всем незарегистрированным
// и зарегистрированным пользователям, за исключением тех,
// которые были помечены как удаленные и запрещенные.
Route::endGroup();
https://phphleb.ru/ru/v1/authorization/
Работы начаты.
Знаком с таблицей прав от 0 до 5, а где можно будет посмотреть новый права по этой шкале?
Как будет готово, информацию будет опубликована. Пока рано говорить, надо подумать…