Роутинг, контроллеры URI

Исходя из логики описанной в разделе Группы и пользователи доступ по http к модели возможен в совокупности следующих свойств:

  • Модель должна быть включена;
  • Одна из активных групп пользователя должна входить в группы доступа модели;

или же:

  • Модель может быть выключена;
  • Одна из активных групп пользователя является владельцем данной модели;

Роутинг запросов к request моделей учитывает системный вес пользователя и сортирует модели с одинаковыми request на основе наибольшего минимального системного веса групп доступа моделей.

Иными словами, контроллер может отдавать модели с одинаковым REQUEST_URI, но с разными файлами обработчиками и контентом в них, разными группами доступов и владельцев моделей. При этом пользователи могут находится в одних и тех же пересекаемых группах. Например пользователь 1 состоит в группе "администраторы" и "пользователи", а пользователь 2 состоит в группе "пользователи". Вес групп пользователя 1 больше. И есть 2 разных модели типа "страница" с одинаковым REQUEST_URI. Но для пользователя 1 доступны обе страницы, а для пользователя 2 только одна. В результате пользователям будут отданы разные страницы, т.к. пользователю 1 будет отдана страница наиболее подходящая по его весу групп.

Разберем наглядный пример из самых простейших вариантов:

Минимальный системный вес групп доступа у модели запроса id 1 = 0. А что если так:

Минимальный системный вес групп доступа для модели запроса id 1 по прежнему равен 0.

Wrong\Rights\Group::weightSort($arr) осуществляет сортировку именно по этому параметру и приоритет для запроса в любом случае будет отдан именно модели нашей админ панели, даже несмотря на то, что мы включили группу Администраторы в группы доступа модели id 1:

Поэтому в группы доступа своих моделей любой пользователь может назначать любые даже старшие по весу группы. Даже если у них есть модели с такими же request uri, им это никак не навредит. Это как в Linux вы назначили своему файлу права rwx-rwx-rwx(0777) - делайте что хотите, ваши проблемы, не хотите не делайте, колхоз дело добровольное.

А теперь такой пример:

Мы отключили модель id 2(главную админ панели), но для группы Система она по прежнему доступна, а вот для всех остальных уже нет. И разрешили доступ всем к главной id 1(не авторизованных). Проверим - зайдем из под Demo пользователя и убедимся:

Demo группе доступна теперь только такая главная. Аналогичного эффекта можно добиться, если отключить группу Demo. Скрипт будет вести себя так, будто этой группы нет. И пользователи группы Demo, если они не состоят в других активных группах, станут Гостями с нулевыми правами не авторизованных.

Выше лишь базовый пример работы роутинг контроллера. Возможности комбинаций групп доступа, владельцев моделей и системного веса, обработчиков и шаблонов на основе этих компонентов ограничены лишь вашей фантазией!

Предупреждения
Фантазия должна ограничиваться здравым смыслом;)

Тем не менее ваши первичные действия в новом проекте всегда будут начинаться с главной. Вы же не собираетесь оставлять текущую главную страницу wrong-mvc. Не стоит её изменять. Просто отключите её, но сначала создайте свою первую модель - главную страницу вашего проекта