
Эта одна из самых больших и сложных(если не самая сложная) статей, которые я публиковал на wedal.ru. Советую читать ее только тогда, когда вы запасетесь духом и вагоном времени на изучение.
Содержание
Когда вам может понадобится система контроля доступа? Вы можете использовать ее в следующих ситуациях:
- У вас есть пользователи, которые должны иметь возможность создавать и редактировать контент, но у них не должно быть возможности публиковать его. Или более того: вы имеете несколько групп пользователей, у которых должна быть возможность создавать и редактировать контент в различных областях сайта. Например, есть три группы пользователей, каждая из которых может добавлять статьи только в определенную категорию. При этом для каждой группы категория своя.
- Вы хотите позволить пользователю редактировать особый модуль, но остальные модули должны быть для него недоступны.
- Вы хотите разрешить пользователю заходить в админку и иметь доступ к определенному компоненту, но не к чему более.
Звучит захватывающе? Да, возможности, которые дает новая система контроля доступа, действительно впечатляют. Но при этом система довольно сложна в настройке и пользоваться ей на первых парах нужно очень осторожно.
Основные термины
Для того, чтобы разобраться с системой контроля доступа Joomla 1.6. нужно понимать все термины, которые в ней используются. Без четкого осознания того, что вы делаете, лучше не начинать.
Пользователь
Пользователем является любой человек, посещающий ваш сайт. Чтобы стать пользователем не обязательно проходить регистрацию на сайте. Достаточно просто зайти на него. Каждый пользователь должен относиться к какой-либо группе пользователей. Права нельзя назначить отдельному пользователю, а можно только группе.
Группа
Группа – это набор пользователей, имеющих одинаковые права на сайте. Оглянувшись на Joomla 1.5. мы можем увидеть, что там было несколько групп: зарегистрированный, автор, редактор, менеджер, администратор и.т.д. У каждой из групп были свои права доступа, но они были фиксированы. Незарегистрированные пользователи относились к группе, имеющей минимальные права доступа, или, проще говоря, они могли лишь просматривать страницы сайта. В Joomla 1.6. количество групп не ограничено и администратор может создать их столько, сколько требуется.
Уровни доступа
Не путайте уровни доступа с группами. Здесь есть тонкая грань, которая отличает два этих термина. Вспомним Joomla 1.5. Групп там было много, но если мы заходили в настройки, например, модуля, то в выпадающем списке опции «Уровень доступа» видели только: Public, Registered и Special. Первые два уровня давали доступ либо всем пользователям, либо только зарегистрированным, а уровень Special давал доступ только пользователям, находящимся в группе «Автор» и выше. В Joomla 1.6. уровни доступа используются для тех же целей, что и в 1.5, но, как и в случае с группами, мы можем их создавать в неограниченном количестве. В уровень доступа могут быть включены одна или несколько групп. Уровни доступа определяют лишь видимость того или иного элемента сайта, но не возможность им управлять. Для того, управлять какой-либо частью сайта, созданы права доступа.
Права доступа
Права доступа используются для того, чтобы разрешить/запретить пользователям определенные действия в определенных частях сайта. В отличие от уровней доступа и групп, набор прав доступа ограничен. В Joomla 1.6 существуют следующие права доступа:
- Вход на сайт – позволяет пользователям группы проходить авторизацию на сайте (на лицевой панели)
- Вход в панель – позволяет пользователям группы входить в панель управления
- Суперадминистратор – позволяет пользователям группы выполнять любые действия по всему сайту, независимо от любых других настроек прав доступа
- Доступ к компоненту – позволяет пользователям группы получать доступ ко всем разделам панели управления, за исключением Менеджера общих настроек
- Создавать – позволяет пользователям создавать любое содержимое в любом расширении
- Удалять – позволяет пользователям группы удалять любое содержимое в любом расширении
- Изменять – позволяет пользователям группы изменять(редактировать) любое содержимое в любом расширении
- Изменять состояние – позволяет пользователям в группе изменить состояние любого содержимого в любом расширении
- Изменять свои – позволяет пользователям в группе изменять содержимое, владельцами (авторами) которого они являются в любом расширении
Эти права являются глобальными. Можно также создать частные права, т.е. такие, которые будут распространяться только на определенную категорию или материал.
Права доступа назначаются группам пользователей. По управлению они сходны с настройками материалов и меню в Joomla 1.5. Вспомните, в Joomla 1.5 можно было задать как общие настройки для всех материалов сайта (я имею ввиду настройки вроде «показывать заголовок», «заголовок как ссылка», «показывать название категории», и.т.д), так и отдельные настройки для каждого материала при его создании/редактировании. При этом, если в настройках отдельного материала написано «использовать глобальные настройки», то они брались из общих. Система прав доступа Joomla 1.6. работает аналогичным образом. Есть общие настройки прав доступа, которые задаются в глобальной конфигурации Joomla 1.6, а есть частные. Они определяются в отдельных категориях, статьях и.т.д. Правда есть и отличия. О них написано на каждой странице настроек. Возьмем текст со страницы материала(прочитайте его очень внимательно(!)):
Выбор нового значения(может быть: унаследовано, разрешено, запрещено)
Если изменить значение этого параметра, оно будет применено для данного материала. Обратите внимание:
Унаследовано - означает, что будет применено значение данного права, указанное в общих настройках, в вышестоящей группе и в категории.
Запрещено - означает, что независимо от значения в общих настройках , в вышестоящей группе и в категории, пользователи данной группы не смогут выполнить указанное действие над этим материалом.
Разрешено - означает, что пользователи данной группы смогут выполнить указанное действие над этим материалом (но, в случае противоречия со значением в общих настройках сайта, в вышестоящей группе или в категории, право предоставлено не будет. Противоречие будет отмечено как Не разрешено (со значком блокировки)).
Мы видим, что из частных настроек(не общих, находящихся в категории, материале, и.т.д, назовем их частные) можно наследовать, ограничивать или расширять права.
Кроме всего вышеперечисленного есть еще одна тонкость, которая окончательно запутывает:
Значение Не задано может быть выбрано только для группы пользователей Все и только в Общих настройках сайта. Группа Все является верхней в иерархии всех групп пользователей. Значения всех прав, указанные, как Не задано будут трактоваться, как Запрещено, но их можно будет переопределить в дочерних группах, компонентах, категориях и объектах.
Т.е Не задано(Не определено) это тоже самое, что и Запрещено, но только с возможностью переопределения без блокировки в дочерних группах. Если вы ничего не поняли, то поздравляю, вы – обычный человек :-) . Все это осмыслится, но далеко не сразу. Советую выполнить тестовый пример, который идет ниже для большего понимания.
Прежде, чем идти дальше, советую еще раз перечитать все термины и постараться максимально их понять, иначе может возникнуть путаница.
Пример работы с правами доступа
Чтобы упорядочить хаос, возникающий при знакомстве с системой контроля доступа Joomla 1.6, разберем пример.
Задача
Требуется создать три группы пользователей:
- group1
- group2
- group3
и три категории:
- category1
- category2
- category3
При этом должны соблюдаться следующие условия:
- Группа group1 должна иметь доступ к категории category1 только для чтения статей и не должна иметь доступа к категориям category2 и category3
- Группа group2 должна иметь доступ к категории category2 для чтения и редактирования статей и не должна иметь доступа к категориям category1 и category3.
- Группа group3 должна иметь доступ к категории category3 для чтения, редактирования и добавления статей и не должна иметь доступа к категориям category1 и category2
- Остальные пользователи не должны иметь доступа к категориям category1, category2 и category3.
Решение
Для начала составим последовательность шагов решения задачи(напишем, что нужно сделать):
- Создать группы group1, group2 и group3
- Назначить глобальные права доступа для созданных групп
- Создать уровень доступа для каждой из групп и связать группы с уровнями доступа
- Создать по одному пользователю для каждой группы и добавить их в группы
- Создать категории category1, category2, category3 и назначить категориям права, подходящие под каждую из групп.
- Проверить результаты
Теперь последовательно реализуем все шаги.
Шаг 1. Создание групп group1, group2 и group3
- Переходим в админке в «Пользователи» –> «Группы» –> «Создать группу»
- Вводим название группы и родительскую категорию.
Родительские категории должны быть следующими:
- для группы group1 – Public
- для группы group2 – Public
- для группы group3 – Public
Шаг 2. Назначение глобальных прав доступа для групп group1, group2 и group3
– Переходим в админке в «Сайт» –> «Общие настройки» –> Вкладка «Права»
Для каждой из групп назначаем следующие права:
|
group1 |
group2 |
group3 |
Вход на сайт |
Разрешено |
Разрешено |
Разрешено |
Вход в панель |
Не определено |
Не определено |
Не определено |
Суперадминистратор |
Не определено |
Не определено |
Не определено |
Доступ к компоненту |
Не определено |
Не определено |
Не определено |
Создавать |
Не определено |
Не определено |
Не определено |
Удалять |
Не определено |
Не определено |
Не определено |
Изменять |
Не определено |
Не определено |
Не определено |
Изменять состояние |
Не определено |
Не определено |
Не определено |
Изменять свои |
Не определено |
Не определено |
Не определено |
Почему права установлены именно так? Сейчас мы работаем в глобальных настройках и права, заданные здесь будут распространяться на весь сайт. В нашей задаче группа group2 должна иметь возможность редактирования, но только одной категории category2. Если мы дадим ей права в глобальной конфигурации, то у нее появится возможность редактирования в любой категории сайта, кроме тех, в настройках которого это прямо запрещено. Согласитесь, в нашем случае гораздо проще именно разрешить редактирование только в настройках одной категории, чем запрещать его в настройках всех категорий, кроме одной. Заметьте, в глобальной конфигурации мы должны оставить именно права Не определенно. Если мы выставим здесь Запрещено, то в настройках категории уже не сможем выставить разрешения.
Шаг 3. Создание уровней доступа для групп group1, group2 и group3
Уровни доступа мы создаем для того, чтобы ограничить видимость определенных категорий, материалов и модулей сайта для определенных групп. Из предыдущего шага видно, что все три группы могут просматривать все материалы. Для ограничения просмотра создадим три уровня доступа:
- для группы group1 – level1
- для группы group2 – level2
- для группы group3 – level3
– Переходим в админке в «Пользователи» –> «Уровни доступа» –> «Создать уровень доступа»
Вводим название уровня и группу(группы), которые будут в него входить. После создания уровней доступа видим в списке уровней следующее:
Шаг 4. Создание пользователей для каждой из групп group1, group2 и group3
Для того, чтобы проверить правильность настройки прав, мы должны создать в каждой из групп group1, group2 и group3 по одному пользователю. После настройки мы сможем авторизоваться под каждым из них на сайте и проверить правильность доступа и прав.
Для создания пользователей:
– Переходим в админке в «Пользователи» –> «Менеджер пользователей» –> «Создать пользователя»
Вводим имя пользователя, логин, пароль, подтверждение пароля, email и выбираем группу, в которую пользователь будет помещен. Я создал следующих пользователей:
- для группы group1 – user1
- для группы group2 – user2
- для группы group3 – user3
Шаг 5. Создание категорий и назначение им прав, подходящих под каждую из групп
Этот шаг самый важный. Именно здесь мы создадим категории и назначим права для каждой из групп пользователей.
– Переходим в админке в «Материалы» –> «Менеджер категорий» –> «Создать категорию»
Задаем название категории, алиас, уровень доступа и кликаем по кнопке «Установить разрешения». После этого задаем права для группы и сохраняем категорию. Данные для всех категорий показаны в таблице ниже:
|
Категория1 |
Категория2 |
Категория3 |
Название |
category1 |
category2 |
category3 |
Доступ |
level1 |
level2 |
level3 |
Группа |
group1 |
group2 |
group3 |
Создавать |
Не разрешено |
Не разрешено |
Разрешено |
Удалять |
Не разрешено |
Не разрешено |
Не разрешено |
Изменять |
Не разрешено |
Разрешено |
Разрешено |
Изменять состояние |
Не разрешено |
Не разрешено |
Разрешено |
Изменять свои |
Не разрешено |
Разрешено |
Разрешено |
Т.е. для каждой из категорий мы устанавливаем собственный уровень доступа, тем самым определяя кто будет их видеть, а также задаем требующиеся права.
После создания всех категорий видим их в менеджере категорий:
Теперь в каждую их категорий нужно поместить хотя бы по одной статье. Это требуется для того, чтобы можно было проверить правильность настройки прав. Я создал следующие статьи:
- для категории category1– article1
- для категории category2– article2
- для категории category3– article3
Статьи создаются через менеджер материалов и связываются с категориями.
После создания статей для, так сказать, чистоты эксперимента, создадим отдельное меню, в которое добавим ссылки на категории с материалами. Меню я назову Wedal menu. В нем будут следующие пункты:
- пункт1 – показывает список материалов категории1
- пункт2 – показывает список материалов категории2
- пункт3 – показывает список материалов категории3
Добавить – позволяет добавлять материалы пользователям из group3.
Модуль с названием Wedal menu и вышеописанными пунктами будет доступен только зарегистрированным пользователям и показан в левой колонке сайта.
Для того, чтобы наши группы также имели доступ к модулю Wedal menu их нужно включить в уровень доступа Registered!
Теперь при авторизации на сайте можно видеть модуль с меню:
Шаг 6. Проверка результатов
Для проверки результатов поочередно авторизовываемся на сайте под пользователями user1, user2 и user3 и проверяем что доступно, а что нет.
В частности user1 имеет возможность просматривать категорию category1, но не имеет возможности просматривать category2 и category3.Вместо них появляется ошибка 404.
User2 имеет возможность просматривать категорию category2, но не имеет возможности просматривать category1 и category3. В категории category2 у него есть возможность вносить изменения в материалы:
User3 имеет возможность просматривать категорию category3, но не имеет возможности просматривать category1 и category2. В категории category3 у него есть возможность вносить изменения в материалы.
Кроме всего этого он имеет возможность добавлять новые материалы в category3(для него работает кнопка «Добавить»).
Конечно, ошибка 404 это не есть хорошо, но здесь она показана лишь для наглядности. В идеале при создании пунктов меню Wedal menu мы должны были задать для каждого из них соответствующий уровень доступа level1, level2, level3.
На этом задача решена. Желательно еще протестировать доступ нестандартными способами, например, попытаться перейти прямо по url в статью, из недоступной группы, и.т.д.
Примечание
На момент написания статьи текущая версия Joomla 1.6 – 1.6.0. При разборе вышеописанного примера я заметил некоторые проблемы в работе системы контроля доступа. Так, если настроить все, как описано выше, пользователь из группы group2 сможет зайти на страницу редактирования статьи из категории category2, но там имеется обязательное для заполнения поле «Категория». В выпадающем списке, по идее, должна быть категория category2, но в нем нет ничего. Таким образом, применить изменения не получается. Категория в выпадающем списке появляется, но только если дать группе group2 права на добавление новостей. К сожалению, при этом они могут не только редактировать статьи, но и добавлять новые.
Кроме этого, я заметил еще несколько ошибок, связанных с правом «Изменить состояние». Если на самом деле это не ошибки, а неточности настройки, буду благодарен за указания в комментариях.
Перенёс свой сайт на вэб-хостинг (благодаря вашим статьям на Хостгатор, просто в восторге от вашего сайта), но сайт в самом начальном состоянии: хочу дать доступ фрилансерам делать модули (в частности). Сайт на джумле 1.5 и пока на 1.6 переходить не планирую (может и зря конечно, но...)
Решил его на уровне шаблонов следующим образом: создал две разных позиции, и сделал условие - если пользователь авторизован - показывается одна позиция, если нет - вторая.
Теперь на счет прав доступа. Я перечитал статью уже раз пять, перечитал перевод мануала на joomla.org, но что то до сих пор так и не въехал в то, как эти права назначаются. Видимо я оооооочень обычный человек... :)
В частности, мне нужно сделать 4 группы: зарегистрированные, модераторы, админы, супер админы.
Зарегистрированные могут добавлять статьи через фронт, модеры могут только работать с com_content через админку, админы могут все, кроме конфигурации жизненно-важных частей сайта, супер админы - могут все.
Но как это сделать - что то так и не понял.
В правах:
пользователь
- зарегистрированные
-- модераторы
--- администраторы
- супер админ
Теперь, допустим, в админке есть некий модуль. Как надо и что сконфигурировать, что бы:
1. Он был виден только супер админу.
2. Он был виден только супер и просто админу.
3. Супер и просто админу + модератору?
А то уже дня три разбираюсь...
Спасибо.
1) Создайте 3 группы доступа и поместите в каждую из них суперадмина, админа и модератора соответственно
2) создайте 3 уровня доступа и поместите в каждый из них по группе.
3) В настройках модуля из выпадающего списка выбирайте соответствующий уровень.
Это если требуется создать доступ к модулю только одной из групп.
Если же требуется дать доступ, например, "Супер и просто админу", то создайте 4-й уровень доступа, в который будут помещены 2 этих группы. И.т.д.
Решение не самое лучшее, но наиболее простое.
мне нужно Закрыть ссылки от не зарегистрированных пользователей
кто то знает каким плагином это можно сделать? Гуглил нифига не могу найти
В базе данных в таблице: jos_viewlevels в колонке rules и в строке Public убрал лишнее значение цифру 8 (незнаю что это, я сравнивал бызы проблемного с рабочим сайтом).
После этого я изменил настройки доступа в панеле и конфликт исчез. Теперь все работает.
Спасибо Вам.
Собственно сам выбор в форме я сделал. Хотелось бы понять как реализована привязка к той или иной группе в БД joomla
другого не порекомендуете?
Опробовал на Joomla 1.7. В принципе, всё получается, но есть нюансы...
Если прописывается точно, как у Вас, то пользователь получает доступ только к одной категории. Список выбора исчезает, а вместо него просто название категории. А как сделать так, чтобы пользователь мог выбрать и подкатегории?
Автору спасибо.
И так для прав суперадминистратора… и для других групп при попытке изменить суперадминистратором их уровень на «разрешено»
Как результат: на сайте невозможно авторизоваться ни одной группе, включая суперадминистратора. Хотя пользователей можно создавать и суперадминистратор имеет возможность без проблем работать с админкой.. А авторизоваться, {вырезано}! Не может… Как это лечится ? Кто знает ???