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/

Работы начаты.

5 Ответов

  1. Знаком с таблицей прав от 0 до 5, а где можно будет посмотреть новый права по этой шкале?

    1. Как будет готово, информацию будет опубликована. Пока рано говорить, надо подумать…

  1. Готово. На GitHub разместил первую часть изменений. Сейчас не стал менять уровни доверия для участников и персонала, оставил пока как есть.

    1. Надо посмотреть, спасибо.

    1. А для «особо одарённых», можно узнать mysql запрос какой нужно сделать на существующем сайте?)