Настройка ACL (Access Control Levels) Joomla
ACL Joomla — одна из самых гибких систем управления доступом среди CMS. Иерархия групп пользователей, уровни доступа к просмотру, наследование разрешений — позволяет реализовать любую бизнес-логику доступа без дополнительных расширений.
Концепция ACL
Группы пользователей — иерархические. Наследуют разрешения родителя. Встроенные: Public → Guest → Registered → Author → Editor → Publisher → Manager → Administrator → Super Users.
Уровни доступа — определяют, какие группы могут просматривать элемент. Встроенные: Public, Guest, Registered, Special, Super Users.
Действия — что группа может делать: Create, Edit, Edit Own, Edit State, Delete.
Создание кастомных групп
Пользователи → Группы пользователей → Добавить:
Родитель: Registered
Название: Premium Member
Создать уровень доступа: Пользователи → Уровни доступа → Добавить:
Название: Premium Content
Доступ для групп: Premium Member
Назначить контенту уровень доступа «Premium Content» — он будет виден только premium-участникам.
Разрешения для компонентов
Каждый компонент имеет собственные разрешения. Глобальная конфигурация → Разрешения задаёт глобальные права. Конфигурация компонента → Разрешения — переопределяет для конкретного компонента.
Пример: редакторы редактируют только контент своих категорий:
Компонент com_content → Категория "Блог" → Разрешения:
Группа: Blog Editors
Действие: Create = Allow
Действие: Edit = Allow
Действие: Edit Own = Allow
Действие: Edit State = Deny (нет публикации)
Программная проверка доступа
use Joomla\CMS\Factory;
$user = Factory::getApplication()->getIdentity();
// Проверить, является ли авторизованным
if ($user->guest) {
// Показать форму входа
echo Factory::getApplication()->getDocument()
->getRenderer('component')
->render('com_users.login');
}
// Проверить доступ к просмотру конкретного уровня
if (!$user->authorise('core.view', 'com_content.article.' . $article->id)) {
throw new \Joomla\CMS\Exception\ExceptionHandler(403);
}
// Проверить разрешение на действие
if ($user->authorise('core.create', 'com_content')) {
// показать кнопку создания
}
// Проверить принадлежность к группе
$groups = $user->groups; // массив ID групп
$isPremium = in_array($premiumGroupId, $groups);
Ограничение доступа к меню и модулям
Каждый пункт меню и модуль имеет параметр Уровень доступа. Установить «Premium Content» — пункт/модуль будет скрыт для всех, кроме premium-пользователей.
Интеграция с платёжной системой
Для платного контента — присвоить пользователю группу после оплаты:
// После подтверждения оплаты
use Joomla\CMS\User\UserHelper;
$user = \Joomla\CMS\Factory::getUser($userId);
$premiumGroupId = 8; // ID группы Premium Member
// Добавить в группу
$groups = $user->groups;
$groups[$premiumGroupId] = $premiumGroupId;
UserHelper::setUserGroups($userId, $groups);
Многоуровневая подписка
Несколько уровней доступа:
Basic Member → видит Basic Content
Pro Member → видит Basic Content + Pro Content
Enterprise Member → видит всё
Реализуется через три группы с наследованием или три независимых уровня доступа, назначенных нужному контенту.
Сроки
Настройка ACL с 3–5 кастомными группами и уровнями доступа для платного контента — 1–2 дня.







