Роли ACL в Joomla
Основные принципы и плюсы ролевого ACL, для случаев, когда сайтом управляет несколько человек. Роли интуитивны и назначаются в соответствии с различными обязанностями работников. Хорошо настроенная система ролей может предоставить пользователю только необходимые ему права.
Ролевой метод – это отступление от метода с уровнями, который использовался в версии 1.5 и стандартной конфигурации ACL версии 2.5 (не утратил актуальность и в версии 3.9.28). Рассмотрим традиционные группы author->editor->publisher. Если бизнес-правила не требуют условия, которое заключается в том, чтобы редактор всегда был автором, а публикатор редактором, то нет нужды в наследовании этих правил. Вместо этого, каждый может быть в группе Public (в качестве родительской), что позволит назначать любую конфигурацию этим трем независимым ролям. Никто не говорил, что публикатор всегда является автором.
Ролевой метод в версии 2.5 выходит за рамки, которые создал уровневый подход.
При назначении ролей мы создаем новые группы и уровни доступа, назначаем несложную иерархию для новых групп и изредка назначаем права доступа. Во фреймворке с уровневым методом эта практика не применима. Нужно выйти за рамки традиционной конфигурации ACL. Вот метод для внедрения ролей в Joomla.
Определите роли, необходимые клиенту
Определитесь с обязанностями, которые нужно разделить между пользователями. Хорошо бы начать с того, чтобы рассмотреть роль для каждого отдельного компонента, так как роли часто привязаны только к одному компоненту. Иногда роль привязывается к нескольким компонентам или некоторым частям сложного компонента. Когда определитесь с ролью, назначьте ее так, чтобы это было понятно для тех, кто будет управлять сайтом и его контентом.
Создайте группу для каждой роли
Используем пользовательскую группу Joomla для того, чтобы назначить роль. Каждая роль представляет свою собственную группу. Если создать 12 ролей, то нужно добавить 12 пользовательских групп. Каждой группе будут предоставлен набор прав доступа, характерных только для нее. Название для группы будет соответствовать названию роли и именно его увидит клиент, когда будет назначать роли пользователям. Придумайте наиболее подходящее название, даже если это потребует несколько слов для описания.
Уберите иерархию групп
Многие роли будут повторять другие и иерархия будет неглубокой. Такая ситуация отличается от той, что мы видели в версиях 1.5 и 2.5 при наследовании групп, где родственные группы встречаются редко и распространена линейная иерархия. Здесь же большинство ролевых групп имеют одну и ту же родительскую группу, так как большинство ролей не связаны с другими ролями и нужно иметь возможность назначить пользователю любой набор ролей, не вызывая конфликта.
Предположим, что ролевые группы будут похожими, но есть две причины для дополнительного уровня наследования: 1) когда много групп имеют одинаковый набор прав доступа или уровень доступа, имеет смысл создать родительскую группу, которая будет представлять эти общие пункты; 2) когда роль включает все права доступа другой роли, а потом расширяется поверх неё, то эта расширяющаяся роль должна наследоваться от ее базовой роли.
Обычно нескольким ролям может потребоваться доступ к панели администратора, поэтому хорошо бы создать родительскую группу, которая дает возможность "Вход в панель управления". Все роли в панели администратора будут иметь такую возможность из-за родительской группы. Требуется внимание к двум пунктам настройки у группы, которая дает доступ к панели администратора. Первый пункт: зайдите в "Общие настройки" и разрешите для этой группы "Вход в панель управления". Второй пункт: если нужно, чтобы для этих пользователей отображалось меню администратора (для некоторых сайтов это может не понадобиться), нужно добавить эту группу в уровень доступа Special. (Почему? Все потому, что меню администратора назначен этот уровень доступа, и вы отвечаете за то, каким вновь созданным группам назначается соответствующий уровень доступа.)
Роли, которым не требуется доступ к панели администратора, могут находиться в группе Public или Registered в качестве родительской. А можно вместо этого создать группу Роли Фронтенда для того, чтобы объединить их под одной группой.
Назначьте права доступа для каждой роли
Обычно роль используется только в одном компоненте. Для каждой ролевой группы зайдите в ее компонент(ы) и назначьте нужные права доступа только для этой ролевой группы. Это не редкость, когда компонент дает права доступа только Суперпользователям, Администраторам и одной ролевой группе. Было бы неплохо забрать права у Администратора (и даже Суперпользователя), оставив только одну ролевую группу.
Создайте ролевые уровни доступа
Важно понимать, как работают уровни доступа в ACL. Грубо говоря, уровень – это не что иное как некоторое собственное объединение пользовательских групп. На практике уровни доступа представляют собой критерии, по которым определяется, является ли пользователь частью уровня доступа (и таким образом, приобретает права). Модулям, пунктам меню, плагинам, категориям и остальному содержимому должен быть назначен уровень доступа. Таким образом в Joomla работает принцип отображения пункта или запуска плагина, который работает в зависимости от настроек пользовательской группы.
Виртуально это назначение является назначением правила, которое инструктирует Joomla отображать ли содержимое или обработать ли плагин, и оно косвенно базируется на назначении групп пользователей.
Возможно, уровень доступа нужно было назвать "правило доступа". Хотя стандартный набор настроек уровня доступа (Public, Registered, Special) представляет собой три яруса уровней, в версии 2.5 нет ничего присущего уровням доступа, что возлагается на уровни. Уровень доступа показывает только набор групп (в любой комбинации без учета уровней).
Мы используем такое положение вещей в своих целях. Если любая часть сайта (категория, модуль администратора, пункт меню) должна быть доступна только тем, кто назначен на определенную роль, то создадим ролевой уровень доступа, включающий только эту группу. Мы настраиваем это как отношение один-к-одному, и таким образом, этот уровень доступа будет предоставлять доступ только тем, кому назначена конкретная роль. Если пользователю не назначена эта роль - у них нет доступа. Учтите, что ролевой уровень доступа нужен не всегда, но если какие-то пункты редактирования должны отображаться только для пользователя с конкретной ролью, понадобится соответствующий уровень доступа.
Правила именования помогают нам создать то, что может стать важным списком. Я использую для каждого ролевого уровня префикс с тильдой (~). Уровни доступа располагаются в алфавитном порядке и это помогает визуально упорядочить их по группам или отделить от стандартного набора (Public, Registered, Special).
Рефакторинг ACL
Рефакторинг означает упрощение без нужды усложненных вещей. В математике мы упрощаем 15/25 до 3/5. В программировании, мы берем сложный код и упрощаем его до нескольких строк. Таким образом проще работать.
Здесь мы оцениваем группы и уровни доступа, которые мы создали и смотрим, как это можно упростить. Возможно, набор групп потребует создания еще одной группы в качестве родительской, чтобы назначить права доступа и уровни. Некоторые ролевые уровни доступа не потребуются вовсе или нужно будет объединить несколько уровней в один. Если все настроено правильно, не придется ничего упрощать, но упрощение ACL – это более удобная работа с конфигурацией.
Модули администратора
Одно из преимуществ ролевого метода - это то, что пользователи, управляющие сайтом через панель администратора могут видеть контрольную панель с доступными для них возможностями. Меню администратора не должно отображать недоступные возможности. Разумно настроить панель администратора с помощью создания модулей администратора, одного для каждой роли, и назначить для каждого модуля соответствующий ролевой уровень доступа. В каждом модуле может содержаться информация или быстрые ссылки, которые отображаются только для тех, кто имеет соответствующий уровень доступа. В панели администратора будут отображаться только те модули, которым соответствует назначенная роль. Иллюстрация ниже.
Назначение роли для пользователей
Важно назначать роли, которые отвечают понятию роли в бизнесе. Если сделать все правильно, клиенту будет легко управлять системой назначения ролей.
Кое-что мы не упомянули, но возможно может понадобиться роль "управляющего пользователями". Эта роль дает возможность создавать пользователей, управлять настройкой, назначать ролевые группы. Эта роль позволяет иметь кому-либо право управления пользователями, не давая ему прав администратора. Не забудьте создать эту роль.
Итог
Вот несколько пунктов, которые помогут создать роль "управляющего пользователями".
Создайте новую группу. Назовите ее "Управление пользователями". Ее родительской группой должна быть группа с правами входа в панель управления и она должна быть добавлена в уровень доступа Special.
Назначьте нужные права доступа. Из панели администратора зайдите в "Пользователи" -> "Менеджер пользователей" -> "Настройки". В разделе "Управление пользователями" (и только там) предоставьте все права доступа, кроме "Настраивать." Остальные права не трогайте.
Уровни доступа. В нашем случае нам не требуется ролевой уровень доступа, так как главное меню будет автоматически отображаться для тех у кого есть доступ. Однако, если нужно сделать несколько модулей администратора только для управляющих пользователями, нужно создать этот уровень для роли.
Назначьте пользователю только эту роль. Потом протестируйте настройки. Войдите как этот пользователь в панель администратора и посмотрите, как все лаконично настроено для возможности управления пользователями.
Этот урок предоставил быстрый подход к созданию ролей в Joomla. Это не трудно, но реализация на основе ролевого ACL требует новой точки зрения. Готовы ли вы к этому?
When you subscribe to the blog, we will send you an e-mail when there are new updates on the site so you wouldn't miss them.
By accepting you will be accessing a service provided by a third-party external to https://digionk.com.ua/
Комментарии