Создание ограниченного в правах Супервизора костыль для модуля Пользователей NetCat
Страница создания виджетов в Netcat находится в админке в меню "Инструменты", а у пользователя с правами "Редактор" отсутствуют все пункты меню, кроме "Сайт" и "Справка". Как же дать редакторам сайта возможность работать с виджетами? Выше Редактора только "Супервизор" с доступом к коду. Чем же провинились виджеты, для создания и редактирования которых не нужно лезть в код? Ответа на этот вопрос в данной статье не будет, потому что мы сами этого не знаем. Но мы нашли решение, как это исправить.
В чем проблема? Проблема в том, что владелец (или администратор) сайта в 99% случаев не должен лезть в текстовый код ни в коем случае. С другой стороны, в большом количестве случаев администратор должен и хочет получить доступ к служебным инструментам, коих в NetCat множество (например - редиректы, виджеты). Недостаток политики пользователей NetCat в том, то между Супервизором и Редактором сайта не хватает еще одного типа пользователя, который имеет доступ ко всему, кроме текстового программного кода.
Была у нас, помнится, статья про то, как вставлять элементы списков NetCat в текстовую страницу с помощью виджетов. А вот, можно сказать, прямое следствие той задачи, вытекающее из особенности политики разграничения прав в нашем любимом Netcat.
Чтобы решить проблему, мы сделаем небольшой костыль, который заключается в том, чтобы ставить куку и через нее закрывать доступ к нежелательным файлам через файл .htaccess. После этого редакторы/администраторы сайта не смогут случайно попортить код, пока не удалят куку. То есть никогда.
Итак, что мы делаем:
- создаем группу Ограниченные Супервизоры, все пользователи которой будут иметь права "Супервизор";
- помещаем в эту группу нужного Редактора. Это делается по необходимости, никакой автоматизации;
- в корневой макет дизайна, в шаблоны навигации, пишем код:
// Если пользователь в группе Ограниченный Супервизор ставим ему Секретную Куку if ($AUTH_USER_ID && in_array(6, $current_user[Permission_Group])) { setcookie("supervisor", "limited"); }
- в директории /netcat/admin создаем файл htaccess, который при наличии Секретной Куки закрывает доступ к чувствительным для нас скриптам. Пользователю в ответ можно написать сообщение, например "У вас нет доступа к этому разделу, обратитесь к разработчикам". Для этого можно сделать редирект на служебную страницу. Например, так:
RewriteEngine on RewriteCond %{HTTP_COOKIE} ^.*supervisor=limited.*$ [NC] RewriteRule ^class/index.php$ supervisor_limited.php [NC,L]
Какие скрипты чувствительные? В первую очередь, все, относящиеся к разделу "Разработка":
/netcat/admin/class/ /netcat/admin/template/ /netcat/admin/field/system.php /netcat/admin/widget/ /netcat/admin/classificator.php
Таким образом, мы получаем вполне рабочий костыль, позволяющий редакторам сайта работать с виджетами.
update: учтите, что создав htaccess в директории /netcat/admin вы им "перекроете" корневой htaccess. Поэтому в него следует скопировать важные фрагменты.
update2: лучше никогда не ставьте подобных костылей в реальной жизни. Эта статья -- просто иллюстрация того, как можно вывернуться. В действительности всегда лучше найти какое-нибудь другое, организационное решение.