[adminTools] Права доступа для ресурсов
Права доступа в MODX — вещь не очень понятная и требует время для познания. С наскока управиться с ними не получится. Даже если нужно просто ограничить доступ к страницам на сайте, всё равно придётся разбираться с группами ресурсов, пользователей, политиками и т.п. Но теперь это делать не обязательно.
Данное решение достаточно простое — у ресурса добавляется вкладка «Права доступа» и в ней можно перечислить, кому показывать страницу, а кому нет. Причём в привычном для многих стиле операционной системы.
Чтобы добавить запись, нажимаем кнопку "+ Добавить" и выбираем нужную строчку в списке «Группа/пользователь».
Первые 2 строчки списка — «Все» и «Гости». Думаю, тут пояснять не нужно. Дальше идут группы. Они выделены жирным шрифтом и обозначены иконкой с несколькими пользователями. Затем перечисляются пользователи (иконка с одним пользователем). Если выбрана группа пользователей, то становится доступным поле «Приоритет». Поясню, зачем оно нужно.
Проверка прав идет последовательно в порядке создания записей. Если указано несколько групп, то права пользователя будут такие, какие указаны для последней группы. Но если у первой группы указать приоритет выше остальных групп, то её права будут выше. Это может пригодится, например, если пользователям группы «Администратор» разрешить доступ, а другой группе, добавленной ниже, запретить. Тогда, если пользователь является членом обоих групп, а у группы «Администратор» приоритет выше, то доступ для пользователя будет открыт. Это что касается приоритета групп. А ещё есть приоритет записей прав.
У записи «Все» наименьший приоритет. У пользователя — максимальный приоритет. Т.е. если группе пользователей дан доступ к ресурсу, а пользователю, входящему в данную группу — нет, то для него этот ресурс будет недоступен и он будет перенаправлен на страницу, указанную в системной настройке unauthorized_page.
Чтобы наоборот, только гости могли видеть страницу, добавляем:
1. «Все» со значением «Запретить».
2. «Гости» со значением «Разрешить».
В общем, пробуйте. Версия пока бета, но ошибок не замечено.
Данное решение достаточно простое — у ресурса добавляется вкладка «Права доступа» и в ней можно перечислить, кому показывать страницу, а кому нет. Причём в привычном для многих стиле операционной системы.
Принцип работы
Включается этот механизм системной настройкой admintools_alternative_permissions. После этого у ресурса будет доступна вкладка «Права доступа». Если права не указаны, то ресурс доступен всем без ограничений. Как только добавили права, начинает работать проверка.Чтобы добавить запись, нажимаем кнопку "+ Добавить" и выбираем нужную строчку в списке «Группа/пользователь».
Первые 2 строчки списка — «Все» и «Гости». Думаю, тут пояснять не нужно. Дальше идут группы. Они выделены жирным шрифтом и обозначены иконкой с несколькими пользователями. Затем перечисляются пользователи (иконка с одним пользователем). Если выбрана группа пользователей, то становится доступным поле «Приоритет». Поясню, зачем оно нужно.
Проверка прав идет последовательно в порядке создания записей. Если указано несколько групп, то права пользователя будут такие, какие указаны для последней группы. Но если у первой группы указать приоритет выше остальных групп, то её права будут выше. Это может пригодится, например, если пользователям группы «Администратор» разрешить доступ, а другой группе, добавленной ниже, запретить. Тогда, если пользователь является членом обоих групп, а у группы «Администратор» приоритет выше, то доступ для пользователя будет открыт. Это что касается приоритета групп. А ещё есть приоритет записей прав.
У записи «Все» наименьший приоритет. У пользователя — максимальный приоритет. Т.е. если группе пользователей дан доступ к ресурсу, а пользователю, входящему в данную группу — нет, то для него этот ресурс будет недоступен и он будет перенаправлен на страницу, указанную в системной настройке unauthorized_page.
Пример
Чтобы закрыть страницу от неавторизованных пользователей, достаточно добавить одну запись «Гости» и запретить им доступ. Всего одно действие! И сравните с обычной настройкой MODX. Чувствуете разницу?Чтобы наоборот, только гости могли видеть страницу, добавляем:
1. «Все» со значением «Запретить».
2. «Гости» со значением «Разрешить».
В общем, пробуйте. Версия пока бета, но ошибок не замечено.
Поблагодарить автора
Отправить деньги
Комментарии: 25
Толковое дополнение. Буду пользоваться, спасибо!
А что будет если пользователь состоит в нескольких группах, с одинаковым приоритетом но одной группе разрешено, другой нет?
И что за приориет записи прав?
Что будет с дочерними ресурсами, в случае если ограничить доступ к родителю?
А так это очень нужное добавление, однозначно в избранное и плюс автору!
Если указано несколько групп, то права пользователя будут такие, какие указаны для последней группы.Получается что группа указана последней будет приоритетнее?
И что за приориет записи прав?
Что будет с дочерними ресурсами, в случае если ограничить доступ к родителю?
А так это очень нужное добавление, однозначно в избранное и плюс автору!
Получается что группа указана последней будет приоритетнее?Да. Я так и написал.
И что за приориет записи прав?Возможно 2 варианта —
1. Приоритет записей — последовательная проверка добавленных прав.
2. Приоритет прав — например, «запрещение» выше «разрешения».
Я выбрал первый вариант, у него больше возможностей.
Логика такая:
1. Запись «Все» — имеет наименьший приоритет. Может быть только одна такая запись.
2. Запись с группой пользователей — перебивает права, указанные в записи «Все». Групп можно указать несколько.
3. Запись с пользователем — имеет наивысший приоритет. Перебивает права групп и записи «Все». Каждый пользователь может быть указан только один раз.
Так как групп может быть несколько, то для них как раз и вводится ещё один приоритет.
Что будет с дочерними ресурсами, в случае если ограничить доступ к родителю?Так же как и в родном механизме MODX — права родителя не влияют на дочерний ресурс. Но думаю, такая возможность будет не лишний. Спасибо за идею.
Приветствую Сергей!
Интересует пункт с правами родителя и дочерних документов.
Попробовал выставить права
Я полагаю такой функционал не сделан?
Подскажите пожалуйста как проще ограничить доступ к дочерним ресурсам? дочерних ресурсов много в ручную конечно же не вариант(все-таки 21 век)
Мысль написать плагин, чтобы слать всех на страницу авторизации если не авторизирован, но это как то «велосипедно», хотелось бы по уму.
Интересует пункт с правами родителя и дочерних документов.
Попробовал выставить права
- все - запрещено
- гости - запрещено
- Users - разрешено
Но неавторизированный пользователь все равно может просматривать дочерний документ.Я полагаю такой функционал не сделан?
Подскажите пожалуйста как проще ограничить доступ к дочерним ресурсам? дочерних ресурсов много в ручную конечно же не вариант(все-таки 21 век)
Мысль написать плагин, чтобы слать всех на страницу авторизации если не авторизирован, но это как то «велосипедно», хотелось бы по уму.
Я полагаю такой функционал не сделан?Нет, не сделан.
Самый простой вариант проверять права у родителя текущего ресурса. Нужно создать плагин на событие OnLoadWebDocument:
$AdminTools = $modx->getService('admintools');
if ($modx->getOption('admintools_alternative_permissions', null, false) && !$AdminTools->hasPermissions($resource->parent)){
$modx->sendUnauthorizedPage();
}
Причем придется добавить еще цикл, для поиска родителя у которого установлены права.
Т.е. я про вложенность, если вложенность 3 уровня или более. Но это блин, замедлит работу.
Т.е. я про вложенность, если вложенность 3 уровня или более. Но это блин, замедлит работу.
Но это блин, замедлит работу.Да не больше чем ещё какой-нибудь сниппет. Так что я бы не морочился на эту тему.
Тоже так подумал потом и написал:)
Этот функционал так зависит от остального функционала adminTools? Штука очень интересная, но её бы в отдельный пакет. Я бы даже купил, когда в следующий раз придется настраиватть доступы.
Было бы хорошо, если бы Сергей вывел эту часть из под компонента.
Свой тихий голос отдаю за отдельный пакет с этим функционалом!
.-.- -....- --… .-
.-.- -....- --… .-
По моему если вынести в отдельный пакет, то получится схожий с этим modstore.pro/packages/users/modaccessmanager
Указанный пакет для ограничения прав в админке. Мой — только для ограничения вывода страниц на сайте.
Не тянет эта «штука» на отдельный пакет. Полноценного интерфейса в админке нет. Функционал ограниченный — права только для фронта и только «load» и «view». Даже «list» уже не тянет.
А чем обусловлено такое желание?
П.С. adminTools — набор независимых друг от друга примочек.
А чем обусловлено такое желание?
П.С. adminTools — набор независимых друг от друга примочек.
Дабы заранее не воротить код, спрошу. Этот компонент — обертка над уже существующими правами (т.е. что-то типа хелпера) или таки права записываюсят как-то отдельно и реализованы по своему?
Как-то отдельно и реализовано по своему.
Мне кажется, что в любом случае просто оберткой дополнение это быть не может, т.к. из коробки MODx заставить распределять доступы для отдельных страниц конкретным пользователям, можно разве что через создание групп пользователей для каждого пользователя. Судя по изменениям кода MODx в последних версиях, что-то в ближайшее время намечается новое, но все равно это из разряда наделок на будущее.
Есть баг в связке с шопкипером 3.2.4
Когда admintools_alternative_permissions активна то вечная анимация прелоадера добавления в корзину и товар не добавляется!
Разбираться было лень откатился на 1.6.0
Когда admintools_alternative_permissions активна то вечная анимация прелоадера добавления в корзину и товар не добавляется!
Разбираться было лень откатился на 1.6.0
А нельзя было просто отключить admintools_alternative_permissions без отката?
Ставил 1.8 только из за этой функции. А другие подводные камни мне не нужны. ;)
Сергей, спасибо за проделанную работу!
Действительно когда приходилось возится с правами это занимало уйму времени.
Еще хотелось бы чтоб в пакет admintools входила похожая штука как AjaxManager. Т.к. AjaxManager давно уже не обновляется и поглючивает когда устанавливаешь на текущие версии модх, а Вы занимаетесь админкой и название(admintools) подходящее, было бы круто чтоб похожий плагин(который работает на свежих версиях нормально) входил в Ваш пакет.
Действительно когда приходилось возится с правами это занимало уйму времени.
Еще хотелось бы чтоб в пакет admintools входила похожая штука как AjaxManager. Т.к. AjaxManager давно уже не обновляется и поглючивает когда устанавливаешь на текущие версии модх, а Вы занимаетесь админкой и название(admintools) подходящее, было бы круто чтоб похожий плагин(который работает на свежих версиях нормально) входил в Ваш пакет.
Еще хотелось бы чтоб в пакет admintools входила похожая штука как AjaxManager.Это чертовски непростая вещь.
Понял, но я был бы рад, что кто-то поддерживает идею «AjaxManager» ибо компонент очень помогает в работе.
Спасибо и на том, что есть щас!
Спасибо и на том, что есть щас!
Очень хороший модуль, Спасибо огромное! А как нибудь можно с помощью данного модуля организовать и запрет вывода товаров в minishop2 для разных групп?
Нет.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.