Сообщество
Статьи
Добавление новой группы пользователей Joomla | Добавление новой группы пользователей Joomla |
|
Все о СMS Joomla!
| |
Flex |
|
|
Как известно, в Joomla существует фиксированный набор групп пользователей с заранее предопределенными правами на различные функции системы. Однако при создании сайтов возникают задачи, которые требуют наличия дополнительных групп пользователей со специфическими правами. Наиболее распространенным решением этой задачи является использование компонента-хака JACLPlus, но не всегда это уместно. На прошлой неделе мне пришлось решать подобную задачу и в этой статье я расскажу как это было реализовано. Постановка задачиНеобходимо добавить в Joomla дополнительную группу пользователей, которая обладала бы следующими правами:
Как мы видим, наиболее похожая группа пользователей это Manager, так как в ней есть и доступ в административную панель Joomla, и нет доступа к большинству административных функций (управление пользователями, расширениями и т. Как известно, в Joomla существует фиксированный набор групп пользователей с заранее предопределенными правами на различные функции системы. Однако при создании сайтов возникают задачи, которые требуют наличия дополнительных групп пользователей со специфическими правами. Наиболее распространенным решением этой задачи является использование компонента-хака JACLPlus, но не всегда это уместно. На прошлой неделе мне пришлось решать подобную задачу и в этой статье я расскажу как это было реализовано. Постановка задачиНеобходимо добавить в Joomla дополнительную группу пользователей, которая обладала бы следующими правами:
Как мы видим, наиболее похожая группа пользователей это Manager, так как в ней есть и доступ в административную панель Joomla, и нет доступа к большинству административных функций (управление пользователями, расширениями и т.д.). Чего же нам нехватает? Да, в принципе, самой малости:
Для решения нашей задачи можно пойти двумя путями: изменить права группы Manager и добавить новую группу, похожую частично на Manager, но с урезанными правами. Первая задача достаточно простая, но не столь интересная в реализации. Эту тему уже не раз обсуждали на форуме, и решения найти не проблема. Я же хочу рассказать о том, как создать дополнительную группу, и как ее наделить нужными правами для решения нашей задачи. Перед началом модификаций рекомендую создать резервную копию изменяемых файлов и базы данных. Если у вас вдруг что-то не получится наличие резервной копии позволит вам откатить изменения и восстановить работоспособность сайта. Добавление новой группы пользователей JoomlaКак известно, в Joomla существует следующая иерархия пользователей: ROOT | - USERS | -- PublicFrontend | - - - Registered | - - - - Author | - - - - - Editor | - - - - - - Publisher | - - Public Backend | - - - Manager | - - - - Administrator | - - - - - Super Administrator Таким образом, нам надо добавить группу пользователей (назовем ее DownloadsManager) в качестве дочерней для Public Backend, чтобы дерево групп пользователей приняло вид: ROOT | - USERS | -- PublicFrontend | - - - Registered | - - - - Author | - - - - - Editor | - - - - - - Publisher | - - Public Backend | - - - Manager | - - - - Administrator | - - - - - Super Administrator | - - - DownloadsManager Информация о существующих группах пользователей и их иерархии располагается в таблице jos_core_acl_aro_groups. Я не буду серьезно вдаваться в подробности технической реализации хранения данных в этой таблице, ограничусь готовым SQL-запросом, который позволит нам добавить нужную группу: SET @parent_name = 'Public Backend'; SET @new_name = 'DownloadsManager'; SELECT @ins_id := group_id, @ins_lft := lft, @ins_rgt := rgt FROM jos_core_acl_aro_groups WHERE name = @parent_name; SELECT @new_id := MAX(group_id) + 1 FROM jos_core_acl_aro_groups; UPDATE jos_core_acl_aro_groups SET rgt=rgt+2 WHERE rgt>=@ins_rgt; UPDATE jos_core_acl_aro_groups SET lft=lft+2 WHERE lft>@ins_rgt; INSERT INTO jos_core_acl_aro_groups (group_id,parent_id,name,lft,rgt) VALUES (@new_id,@ins_id,@new_name,@ins_rgt,@ins_rgt+1); После выполнения данного запроса в списке доступных групп пользователей появится DownloadsManager. Однако, если мы в Менеджере пользователей попробуем создать пользователя с такой группой, мы гарантированно получим ошибку: «You cannot create a user with this user Group level, only Super Administrators have this ability». Это означает, что текущий пользователь не может создать пользователя с группой, которая не является дочерней, по отношению к группе текущего пользователя. Это ограничение было введено для того, чтобы пользователи группы Администратор не могли создавать Суперадминистраторов. В нашем случае, созданная группа DownloadsManager не является дочерней даже для Суперадминистратора, поэтому создать такого пользователя не получается. Чтобы это разрешить, мы сделаем небольшую модификацию, которая на безопасность не особо повлияет:
В результате данной модификации, мы разрешим пользователям группы Суперадминистратор создавать пользователей любых групп. Однако, создать группу и получить возможность добавлять в нее пользователей это ползадачи. Нам нужно теперь настроить права этой группы: возможность авторизации в административной панели Joomla, доступ к компоненту Remository и запретить доступ к материалам сайта. Предоставление доступа в административную панель JoomlaПрава групп пользователей прописаны статически в файле /includes/gacl.class.php. Для того, чтобы наша группа пользователей имела право на авторизацию в административной панели Joomla необходимо в этом файле, после строчки: $this->_mos_add_acl( 'administration', 'login', 'users', 'manager', null, null ); добавить еще одну: $this->_mos_add_acl( 'administration', 'login', 'users', 'downloadsmanager', null, null ); Так, теперь пользователи этой группы могут беспрепятственно входить в административную панель Joomla и фактически равны по правам пользователям группы Manager, однако пока не имеют доступа к компоненту Remository и могут редактировать материалы сайта. Предоставление доступа к компоненту RemositoryДля того, чтобы пользователи группы DownloadsManager могли работать с компонентом Remository необходимо, чтобы во-первых пользователи этой группы видели меню Компоненты и, во-вторых, чтобы они имели доступ к самому компоненту. Для начала, добавим в /includes/gacl.class.php права на компонент. Для этого найдем строчку: $this->_mos_add_acl( 'administration', 'edit', 'users', 'manager', 'components', 'com_media' ); и добавим после нее: $this->_mos_add_acl( 'administration', 'edit', 'users', 'downloadsmanager', 'components', 'com_remository' ); Все, пользователи группы DownloadsManager будут иметь доступ к компоненту Remository. Займемся теперь доступностью пункта меню Компоненты Настройка видимости пунктов меню административной панели JoomlaГлавное меню административной панели Joomla выводится модулем mod_fullmenu, расположенном в папке /administrator/modules. Его мы и будем править, чтобы настроить видимость пунктов в зависимости от прав пользователя. В файле /administrator/modules/mod_fullmenu.php находим строчку: $canManageUsers = $acl->acl_check( 'administration', 'manage', 'users', $usertype, 'components', 'com_users' );и добавляем после нее: $canEditRemository = $acl->acl_check( 'administration', 'manage', 'users', $usertype, 'components', 'com_remository' ); $canEditContent = $acl->acl_check( 'administration', 'edit', 'users', $usertype, 'components', 'com_content' ); $canEditMenus = $acl->acl_check( 'administration', 'edit', 'users', $usertype, 'components', 'com_menus' ); Затем чуть ниже заменяем if ($installComponents) {на if ($installComponents || $canEditRemository) { Далее после строчки // Content Sub-Menu добавляем if ($canEditContent) {и чуть ниже, перед строчкой // Components Sub-Menu вставляем }
И теперь отключим отображение пункта меню Медиа-менеджер. Заменяем строчку: ['<img src="../includes/js/ThemeOffice/media.png" />','Media Manager','index2.php?option=com_media',null,'Manage Media Files'],на <?php if ($canEditMenus) { ?> ['<img src="../includes/js/ThemeOffice/media.png" />','Media Manager','index2.php?option=com_media',null,'Manage Media Files'], <?php } ?> Чтобы скрыть лишние пункты меню сделаем еще несколько модификаций данного модуля. После строчки: $manageMenuMan = $acl->acl_check( 'administration', 'manage', 'users', $usertype, 'components', 'com_menumanager' ); добавим: $manageMenu = $acl->acl_check( 'administration', 'manage', 'users', $usertype, 'components', 'com_menus' ); Все, теперь пользователей группы DownloadsManager станет доступно меню Компоненты, в котором будет только один подпункт — Remository. Другие компоненты будут недоступны (за исключением com_content, com_menus и com_typedcontent). Мы уже очень близки к поставленной цели: у нас есть новая группа, пользователи этой группы имеют доступ к административной панели Joomla и в ней могут работать с административной частью компонента Remostitory. Кроме того, пользователь уже не видит лишних пунктов меню (Медиа-менеджер, Меню, Материалы). Дело за малым: закрыть реальный доступ к редактированию меню и материалов сайта. Запрет группе доступа к редактированию меню и материаловСначала немного расширим список прав групп, чтобы явно предоставить права на Меню и Материалы пользователям групп Manager, Administrator и Super administrator. Для этого в файле /includes/gacl.class.php после строчки: //array( 'administration', 'edit', 'users', 'manager', 'modules', 'all' );
добавим: // access to com_menus $this->_mos_add_acl( 'administration', 'edit', 'users', 'super administrator', 'components', 'com_menus' ); $this->_mos_add_acl( 'administration', 'edit', 'users', 'administrator', 'components', 'com_menus' ); $this->_mos_add_acl( 'administration', 'edit', 'users', 'manager', 'components', 'com_menus' ); // access to com_content $this->_mos_add_acl( 'administration', 'edit', 'users', 'super administrator', 'components', 'com_content' ); $this->_mos_add_acl( 'administration', 'edit', 'users', 'administrator', 'components', 'com_content' ); $this->_mos_add_acl( 'administration', 'edit', 'users', 'manager', 'components', 'com_content' ); // access to com_typecontent $this->_mos_add_acl( 'administration', 'edit', 'users', 'super administrator', 'components', 'com_typedcontent' ); $this->_mos_add_acl( 'administration', 'edit', 'users', 'administrator', 'components', 'com_typedcontent' ); $this->_mos_add_acl( 'administration', 'edit', 'users', 'manager', 'components', 'com_typedcontent' ); Теперь, необходимо отредактировать файлы этих компонентов, чтобы запретить доступ к ним тем группам, у которых права явно не прописаны. Для этого, выполним следующие модификации: Открываем файл /administrator/components/com_menus/admin.menus.php и сразу после строчки: ( '_VALID_MOS' ) or ( 'Restricted access' ); добавляем проверку прав: if (!($acl->acl_check( 'administration', 'edit', 'users', $my->usertype, 'components', 'all' ) | $acl->acl_check( 'administration', 'edit', 'users', $my->usertype, 'components', 'com_menus' ))) { mosRedirect( 'index2.php', _NOT_AUTH ); } Открываем файл /administrator/components/com_content/admin.content.php и сразу после строчки: ( '_VALID_MOS' ) or ( 'Restricted access' ); добавляем проверку прав: if (!($acl->acl_check( 'administration', 'edit', 'users', $my->usertype, 'components', 'all' ) | $acl->acl_check( 'administration', 'edit', 'users', $my->usertype, 'components', 'com_content' ))) { mosRedirect( 'index2.php', _NOT_AUTH ); } Открываем файл /administrator/components/com_typedcontent/admin.typedcontent.php и сразу после строчки: ( '_VALID_MOS' ) or ( 'Restricted access' ); добавляем проверку прав: if (!($acl->acl_check( 'administration', 'edit', 'users', $my->usertype, 'components', 'all' ) | $acl->acl_check( 'administration', 'edit', 'users', $my->usertype, 'components', 'com_typedcontent' ))) { mosRedirect( 'index2.php', _NOT_AUTH ); } Все! После вставки данных проверок, пользователи группы DownloadsManager гарантированно получат отказ при попытке редактирования материалов сайта из административной панели Joomla. ЗаключениеДавайте подведем итоги. В этой статье мы добавили новую группу пользователей Joomla, предоставили ей доступ к компоненту Remository и запретили изменять меню и материалы сайта. Таким образом мы получили группу менеджеров файлового архива, которые могут беспрепятственно заходить в административную панели и управлять файловым архивом, реализованным посредством компонента Remository. В принципе осталась еще одна мелочь, которую я не описал в статье, бо это не интересно: скрыть лишние кнопки на главной странице панели управления Joomla. Если общественность потребует, я опишу это в следующей статье. Желаю успешных экспериментов, жду отзывов и вопросов на ! По материалам: |
|
Быстрое сообщение
Комментарии (0)
| < Пред. | След. > |
|---|
химическое выпрямление волос, обучение бесплатно.
Механизмы диванов, где купить диван раскладушка. Интернет диван.
Добавить в закладки
RSS
Login




Flex 





