Группы и пользователи

Иерархия прав доступа и действий над моделями в системе реализована посредством групп и пользователей. Пользователь может состоять одновременно в различных группах. У каждой группы есть системный вес, определяющий приоритет прав одной группы над другой. Если пользователь состоит в группах с различным весом, при расчете его приоритета над другим пользователем, либо имуществом другой группы(моделями), рассчитывается максимальный вес группы в которых он состоит.

Доступность модели(чтение) пользователю оределяется наличием группы в которых состоит пользователь в группах доступа модели, либо же одна из групп в которых состоит пользователь является владельцем модели. Модели отключенных групп недоступны.

Возможность действий над моделью(запись) определяется принадлежностью пользователя к группе владельцу модели или приоритетом максимального системного веса групп пользователя над группой владельцем модели. При этом функционал для данных действий должен быть тоже доступен.

Есть 2 особых группы пользователей, неявная группа Гости - условно id 0, это неавторизованные пользователи. Данной группы нет в таблице групп, поскольку она бесправная(системный вес = 0) и для неё настраивать нечего, но она есть в системе. А также есть особая группа Система id 1, с максимальным весом, в которой состоит основной администратор системы и которой принадлежат все системные модели.

Моделями в системе является всё что имеет группу владельца, это:

  • Группы пользователей
  • Пользователи
  • Шаблоны
  • Страницы
  • Выборки
  • Модальные окна
  • Действия
  • Cron задачи

У моделей типа Страницы, Выборки, Модальные окна, Действия помимо группы владельца, есть группы доступа - это группы которым такая модель доступна по http через контроллер include/uri-router.php т.е. пользователи состоящие в указанных группах доступа модели могут её вызывать. Но они не могут произоводить действия надо этой моделью, включать/отключать её, изменять её группы, владельцев, переименовывать.

Для модели типа Шаблоны группы доступа - это те группы, которым данный шаблон будет доступен при создании моделей, а также использование и встраивание таких шаблонов.

Для модели типа Пользователи группы доступа - это те группы в которых состоит пользователь.

Для группы владельца модели его модель всегда доступна, даже если она отключена.

Модели принадлежащие особой группе Система защищены от удаления и переименования, основному администратору системы(id 1) доступна лишь часть действий над ними, несмотря на то, что администатор сам состоит в группе Система. Он может лишь включать/отключать системные модели, копировать, экспортировать, импортировать их, и менять у них группы доступа. Это исключение из общей логики работы с моделями владельцами которых вы являетесь.

Внимание
Группы доступа у системных моделей следует менять с осторожностью, а также с осторожностью отключать их. Например, если вы отключите функционал отвечающий за авторизацию, то не сможете войти в систему, и вам придётся включать его через бд - есть поле act у каждой модели, отвечающее за это. Впрочем, перед каждым подобным действием, вам будет показано предупреждение.

Владельцы моделей - это группа владелец которым принадлежит модель. Владелец может делать со своей группой всё что угодно - удалять, или менять любые её свойства - переназначать группу владельца(из числа подчиненных групп), изменять для модели группы доступа, переименовывать файлы обработчики(они автоматически будут перемещены в фс и созданы каталоги под них), переименовывать request http запросы, по которым доступна модель, включать и отключать её.

Подчиненные группы - это группы в которых состоит пользователь и группы с меньшим системным весом, чем максимальный вес групп в которых состоит пользователь. С моделями, принадлежащими подчиненным группам, пользователь также может делать всё что угодно, если у него включен и доступен соответствующий функционал моделей для этого.

Например действие удаление - api/action/system/global/rm.php(модель /api/action/rm) наша группа пользователя должна быть включена в группы доступа у модели rm, если мы хотим удалить какую либо модель подчиненной или своей группы.

Для группы может быть назначен лимит моделей, более которого ей не может быть создано/назначено/копировано/импортировано принадлежащих моделей. По умолчанию лимит - 0, это безлимит.

При добавлении новой группы, чтобы не перебирать затем каждую модель, её можно автоматически включить в группы доступа всех моделей у которых назначен доступ для "всех". А также новую группу можно автоматически включить в доступы всем моделям доступным самому владельцу новой группы.

Если отключить группу, скрипт ведет себя так, будто этой группы у пользователя не существует. Если отключить пользователя, он во всех моделях получает ошибку(страницу, если эта страница) 403 - доступ запрещен.

Включенные модели доступны включенным группам доступа пользователей и группе владельцу.

Отключенные модели доступны только группе владельцу.

Выключение модели делает её недоступной всем кроме группы владельца.

Модели выключенных групп недоступны на чтение.

Выключение группы пользователей исключает её из групп пользователя(временно, виртуально), т.е пользователь просто лишается всех прав выключенной группы.

Выключение пользователя отключает ему весь функционал на всех моделях. Доступна становится лишь одна страница - 403.

Изменять свойства модели могут группы владельцы и старшие по системному весу группы(имеющие доступ к функционалу изменения этих свойств).