все форумы все темы добавить тему
Разграничение прав в админке
Появилась задача разделить права пользователей в админке.
По доступу хочу сделать так:
- группа администраторы: всё то, что есть в админке
- авиа-кассиры: только доступ к админскому модулю admin_avia
- менеджеры: произвольный доступ к нескольким модулям.
 
Кроме того, у меня буду так называемые "агентства", у которых не будет своего доступа в админку, но будет определенный доступ к некоторым модулям на фронтенде.
 
Группы я заведу. Модули напишу.
Что мне необходимо знать, перед тем как я начну делить конфеты права? На какие грабли я могу наступить в процессе?
Да в общем-то там вроде бы все предельно просто:
Каждый модуль имеет определенный набор прав.
Возможные права описываются в config.xml модуля.
Права выставляются на связку модуль-группа.
 
Проверяются при помощи функции access($rules), где $rules - название разрешения. Так же можно передать сразу несколько названий, разделенных запятой. Если хотябы одно из них истинно - функция вернет true.
Для суперадмина функция всегда возвращает true в независимости от параметров.
 
У класса LabCMS есть еще удобный метод error403(), перебрасывающий неавторизованного пользователя на страницу авторизации, а для авторизованного выводящий шаблон errors/error403.tpl с текстом об отсутствии прав доступа.
 
Права в группах наследуются. То есть группа находящаяся дальше от корня, по определению, не может иметь прав меньше чем ее родителя. Корнем является группа гостей - самая "бесправная".
 
Вроде бы все...
Уже разобрался. Спасибо.
 
А возможно ли каждой группе свой index для админки слепить?
То есть зону, в которой будут доступные именно этой группе модули админки и какой-то текст.
 
Если входить через точку входа /admin то туда же и редиректит после авторизации. И там отвечают, что доступа нет.
 
Я могу, например, создать в структуре корневой пункт /admin_manager, туда накидать подпунктов меню и давать этот линк как админку для менеджеров. Но хочется единую точку входа всё же.
 
Тут два очевидных пути:
1. допилить модуль admin под свои нужды.
2. поменять у модуля admin адрес на любой другой, а по адресу /admin/ создать страницу со своим модулем приветствия.
 
PS На самом деле, для этого даже модуль не нужен - достаточно шаблона с парой условий, но с модулем удобнее - кто знает что понадобится завтра.
Ок. Так и сделаю.
 
А есть какая-то возможность определить в шаблоне находимся мы в админке или нет?
random2
А есть какая-то возможность определить в шаблоне находимся мы в админке или нет?

 
Простой способ: создать для админки отдельный шаблон (пусть даже в точности повторяющий шаблон default.tpl) и подключить его к корневому элементу админки - при этом он распространится на всю админку. Если же делать отдельный шаблон очень не хочется то,
Простой, но менее понятный способ:
PHP
LabCMS::i()->parents

Это свойство содержит массив всех родительских элементов для текущего узла. Следовательно, корневой элемент текущей ветви будет находиться тут:
PHP
LabCMS::i()->parents[0]

Для админки он будет равен единице (если только Вы его не удаляли. Если удаляли - можно легко посмотреть в структуре его новый id). Таким образом, в шаблоне:
Smarty
{if LabCMS::i()->parents[0]==1}Мы находимся в админке{/if}