[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
Вещь! Спасибо!
2. Запретить установку определённого пакета— это, кстати, ой как полезно, жаль не угадаешь что владелец сайта удумает пробовать самостоятельно устанавливать (но, благо, MODX это не WP и не J***!)
Тебе спасибо за идею. )
Цветовые темы больше не работают, переключал переключал, чистил все кеши, всё равно стандартная тема.
И кнопка избранных элементов с панели элементы пропала.
И кнопка избранных элементов с панели элементы пропала.
Полностью снёс пакет и заново поставил, те же проблемы. Функционал избранных элементов не работает.
Ещё заметил пропали стандартные кнопки (плюсик и обновлялка) в панелях элементов.
В консоли вываливает кучу ошибок типа adminTools.config
Пришлось пока снести обновление и поставить старую версию, она стабильно работает.
Ещё заметил пропали стандартные кнопки (плюсик и обновлялка) в панелях элементов.
В консоли вываливает кучу ошибок типа adminTools.config
Пришлось пока снести обновление и поставить старую версию, она стабильно работает.
Проверим. Пока отключил обновление. На тестовом сайте всё гуд (см. картинку в топике).
Исправил. Проверил на своих сайтах, всё работает.
Спасибо за багтестинг!
Спасибо за багтестинг!
Вам, Сергей спасибо, за прекрасные дополнения к MODX. Жаль что в последнее время от Вас не часто слышно новостей по новым компонентам.
У меня сейчас вообще нет времени на программирование. Но как только освобожусь, закончу то что запланировал на Laravel. Думаю, многим здесь это понравится. :)
А запретить сразу для всех пакетов можно?
Я не делал. Проще убрать доступ в этот интерфейс.
Ну а если можно обновлять все пакеты, а другие действия запретить, то закрыть доступ не вариант.
Решение:
Написать в admintools_package_actions
а в файле assets/components/admintools/js/mgr/admintools.js заменить строчку
Решение:
Написать в admintools_package_actions
{All:{remove:"Удаление запрещено!"}}
— запрет для удаление для всех пакетова в файле assets/components/admintools/js/mgr/admintools.js заменить строчку
var packageOptions = adminToolsPackageActions[record.data.name] ? adminToolsPackageActions[record.data.name] : false;
на var packageOptions = adminToolsPackageActions['All'] || adminToolsPackageActions[record.data.name] || false;
Идею понял, но решение не додуманное — настройка All всегда в приоритете. Т.е. нельзя разрешить какое-то действие в пакете. Но даже если поменять местами аргументы, то все равно нужно проверять совпадения действий.
Поменять местами аргументы и пусть конкретное правило для пакета всегда будет в приоритете.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.