PearCMS Docs v2.4
Документация / Панель / Пользователи и группы

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

Колонка users.role убрана; права теперь складываются из личных флагов и членства в группах. Это гибкая модель: разные сайты могут настроить роли по-своему без вмешательства в код.

Актуально для v2.4 Обновлено 1 июля 2026

Модель: флаги + группы #

Итоговый набор прав пользователя — это union двух источников:

  • users.flags — личные флаги (override)
  • groups.flags для всех групп, в которых юзер состоит (через users__groups)
app/Security/Auth.phpphp
public static function flags(): string
{
    $personal = (string)($_SESSION['user_flags']       ?? '');
    $group    = (string)($_SESSION['user_group_flags'] ?? '');
    return $personal . $group;
}

При логине обе строки загружаются в сессию; для мобильного REST то же делает TokenService::resolveBearer.

Каталог флагов #

Флаг — это одна буква a–z. Описания и человекочитаемые подписи хранятся в таблице settings__flags и редактируются в админке. Стандартный набор:

ФлагНазначение
aСоздание контента
bРедактирование чужого контента
cУдаление
dУправление пользователями (protected)
eУправление модулями (protected)
fУправление настройками (protected)
nРедактирование меню
rЧтение логов
zROOT — полный доступ (protected)

Защищённые (protected) флаги нельзя удалить из админки. Можно добавлять свои буквы — главное соблюдать соглашение «одна буква a–z».

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

Группа — это именованный набор флагов. Пользователь, добавленный в группу, автоматически получает все её флаги. Это удобнее, чем выдавать буквы каждому персонально.

Дефолтная группа admin создаётся миграцией и даёт z. Её нельзя удалить (is_protected = 1).

Создание группы — Группы → Создать:

  1. Slug — латиница a–z, цифры, дефис. Не меняется после создания.
  2. Название — для людей, отображается в списках.
  3. Флаги — чекбоксы, можно выбрать любую комбинацию из каталога.
Privilege escalationНе-root не может создать группу с z или зачислить кого-то в такую группу. Не-root не может редактировать пользователя, у которого есть z (личный или через группу).

Карточка пользователя #

В форме создания/редактирования юзера — два независимых блока:

  • Группы (multi-select) — определяют базовый набор флагов
  • Личные флаги — override поверх групп, для точечных корректировок

Также: логин, пароль, локаль интерфейса. Аватар и 2FA — редактируются самим юзером в Профиле.

Связь user↔group хранится в users__groups с ON DELETE CASCADE — удаление юзера или группы автоматически чистит связи.

Что такое z и кто root #

z — особый флаг. Когда Auth::hasFlag('x') вызывается с любой буквой x, проверка сразу возвращает true, если у юзера есть z:

Auth::hasFlagphp
if (str_contains($f, 'z')) return true;  // root всегда проходит
return str_contains($f, $flag);

Legacy-проверки вроде Auth::isRole('admin') остались для совместимости, но теперь они означают «есть z» — личный или через группу.