[AdminTools] Запрет действий с пакетами
Всем привет! Хоть я последнее время мало уделяю внимания MODX, но уж очень мне понравилась идея Владимира. И я решил добавить такой функционал в свой пакет AdminTools. Реализация достаточно простая — без таблиц, интерфейсов и т.п. Только системная настройка, в которой определяются права. Подробности под катом.

Для пакетов в MODX определены следующие действия:
— Установка (install)
— Переустановка (reinstall)
— Деинсталляция (uninstall)
— Обновление (update)
— Удаление (remove)
— Проверить обновление (checkupdate)
— Посмотреть детали (details)
Любое из этих действий можно запретить. Также можно запретить сразу все действия (об этом ниже). Для управления этим функционалом добавлена системная настройка admintools_package_actions. В ней нужно указать права для пакетов в формате javascript объекта:
Дальше на примерах покажу как это настраивается.
1. Запретить удаление пакета
2. Запретить установку определённого пакета
3. Запретить все действия для пакета. Для этого добавлен специальный ключ all.
4. Разрешить только некоторые действия для пакета.
Названия пакетов регистрозависимые, поэтому будьте внимательны.
В общем, пробуйте, благодарите или ругайте. :)

Для пакетов в MODX определены следующие действия:
— Установка (install)
— Переустановка (reinstall)
— Деинсталляция (uninstall)
— Обновление (update)
— Удаление (remove)
— Проверить обновление (checkupdate)
— Посмотреть детали (details)
Любое из этих действий можно запретить. Также можно запретить сразу все действия (об этом ниже). Для управления этим функционалом добавлена системная настройка admintools_package_actions. В ней нужно указать права для пакетов в формате javascript объекта:
{package1:{action1:false, action2:"Сообщение для action2.", message:"Сообщение по-умолчанию."},
package2:{...}}Чтобы запретить действие, можно указать или false или сообщение. Если указано false, то сообщение будет искаться в ключе message. Этот ключ пригодится, если нужно вывести одно сообщение для всех действий. Таким образом, для каждого действия можно указать своё сообщение или для всех одно общее или вперемешку — для некоторых определить, для остальных общее.Дальше на примерах покажу как это настраивается.
1. Запретить удаление пакета
{Ace:{remove:"Удаление запрещено!"}}
// или так
{Ace:{remove:false}} // Выведется дефолтное сообщение "Доступ запрещён!".
// или так
{Ace:{remove:false, message:"Действие запрещено!"}}2. Запретить установку определённого пакета
{Ace:{install:"Данный пакет устанавливать запрещено по причине несовместимости!"}}3. Запретить все действия для пакета. Для этого добавлен специальный ключ all.
{Ace:{all:"Все действия с этим пакетом запрещены!"}}4. Разрешить только некоторые действия для пакета.
{Ace:{details:true, all:"Это действие запрещено!"}}
// эквивалентно
{Ace:{details:true, all:false, message:"Это действие запрещено!"}}Названия пакетов регистрозависимые, поэтому будьте внимательны.
В общем, пробуйте, благодарите или ругайте. :)
Комментарии: 13
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
— это, кстати, ой как полезно, жаль не угадаешь что владелец сайта удумает пробовать самостоятельно устанавливать (но, благо, MODX это не WP и не J***!)
И кнопка избранных элементов с панели элементы пропала.
Ещё заметил пропали стандартные кнопки (плюсик и обновлялка) в панелях элементов.
В консоли вываливает кучу ошибок типа adminTools.config
Пришлось пока снести обновление и поставить старую версию, она стабильно работает.
Спасибо за багтестинг!
Решение:
Написать в admintools_package_actions
— запрет для удаление для всех пакетов
а в файле assets/components/admintools/js/mgr/admintools.js заменить строчку
на