9

DEV: Промежуточное ПО (middleware)

03 Января 2022 16:48 (ред)

Промежуточное ПО (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/

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

9
  • Создал
  • Последний ответ
  • 74
    Просмотра
  • 6
    Ответов

6 Ответов

  1. OleStep OleStep 03 Января 2022 16:52

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

  1. Evg Evg 03 Января 2022 17:27
    Как будет готово, информацию будет опубликована. Пока рано говорить, надо подумать...
  1. Evg Evg 04 Января 2022 23:00

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

  1. OleStep OleStep 04 Января 2022 23:01
    Надо посмотреть, спасибо.
  1. Murad Murad 05 Января 2022 11:36
    А для "особо одарённых", можно узнать mysql запрос какой нужно сделать на существующем сайте?)
  1. Evg Evg 05 Января 2022 13:20
    Через phpmyadmin просто удалите таблицу users_trust_level она не нужна. Запрос: DROP TABLE users_trust_level;