Налаштування 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 дні.







