Реализация разделения прав пользователей в MODX
Добрый день!
Начинаю разработку нового проекта, там нужно реализовать разделение прав особым образом.
Пока запланировал делать так:
Вот собственно и вопрос — как это реализовать?
У меня есть предположение, но не уверен, что оно оптимально:
Создавать для каждого пользователя новую группу ресурсов, к которой ему будет установлен доступ уже в соответствии с политикой Object и добавлять ресурс в его группу, таким образом предоставляя доступ к каждому ресурсу в отдельности выборочно. Не будет ли слишком много групп ресурсов?
Сорри за некоторый сумбур…
Начинаю разработку нового проекта, там нужно реализовать разделение прав особым образом.
Пока запланировал делать так:
- Пользователь принадлежит одной из групп — Организаций
- Все ресурсы находятся в одной из групп ресурсов (для удобства они называются так же, как и организации-группы пользователей)
- У каждой группы ресурсов добавлен доступ для пользователей с ролью Колл-центр (Ранг 5000) и политикой Object
- У каждой группы ресурсов добавлен доступ для пользователей с ролью Поддержка (Ранг 8000) и политикой Context (они по умолчанию не видят ни один из ресурсов)
Вот собственно и вопрос — как это реализовать?
У меня есть предположение, но не уверен, что оно оптимально:
Создавать для каждого пользователя новую группу ресурсов, к которой ему будет установлен доступ уже в соответствии с политикой Object и добавлять ресурс в его группу, таким образом предоставляя доступ к каждому ресурсу в отдельности выборочно. Не будет ли слишком много групп ресурсов?
Сорри за некоторый сумбур…
Комментарии: 10
Первая мысль — сделать проще:
В шаблоне этих страниц указать сниппет (или вовсе сделать плагин), который при загруpке будет проверять какое то поле ресурса (например, properties) или ТВ параметр. Там должно быть какое то слово, которое должно быть в определенном поле юзера.
Если есть — открывается, если нет — ошибка 401.
Это позволит гибко назначать права и не плодить кучу групп. Права в ресурсе и у юзера лучше хранить в виде json-массива.
Вторая мысль — написать свою минисистему, с административной частью, и сделать связь юзер-ресурс через отдельную таблицу.
Выбирайте.
В шаблоне этих страниц указать сниппет (или вовсе сделать плагин), который при загруpке будет проверять какое то поле ресурса (например, properties) или ТВ параметр. Там должно быть какое то слово, которое должно быть в определенном поле юзера.
Если есть — открывается, если нет — ошибка 401.
Это позволит гибко назначать права и не плодить кучу групп. Права в ресурсе и у юзера лучше хранить в виде json-массива.
Вторая мысль — написать свою минисистему, с административной частью, и сделать связь юзер-ресурс через отдельную таблицу.
Выбирайте.
Спасибо, изначально планировал использовать отдельную таблицу, но потом вспомнил, что есть нативная система доступов и свернул на эту дорожку) Вернусь к работе со своими таблицами
Подскажите, пожалуйста еще — как реализовывать списки ресурсов?
Если в правах доступа мы закрыли доступ к ресурсу, то ни Wayfinder, ни getResources не будут отображать этот ресурс для пользователя. Если делать связь через отдельную таблицу, вставлять список id-шников прям в getResources? Их ведь там тоже может накопиться порядочно — или сниппету getResources плевать на длину параметра &resources?
Если в правах доступа мы закрыли доступ к ресурсу, то ни Wayfinder, ни getResources не будут отображать этот ресурс для пользователя. Если делать связь через отдельную таблицу, вставлять список id-шников прям в getResources? Их ведь там тоже может накопиться порядочно — или сниппету getResources плевать на длину параметра &resources?
Да вроде плевать. Еще есть параметр where — по нему можно выбирать.
Да и вообще, никто не мешает скопировать нужные сниппеты, переименовать, немного доработать — и использовать вместо оригинальных. Обновлять же вам их не надо из репозитория, так?
Да и вообще, никто не мешает скопировать нужные сниппеты, переименовать, немного доработать — и использовать вместо оригинальных. Обновлять же вам их не надо из репозитория, так?
А мне кажеться писать никаких минисистем не нужно. В модексе очень прекрастное распределение прав.
+ Прекрастная настройка форм где вы можете настроить бек как вам нужно
+ Прекрастная настройка форм где вы можете настроить бек как вам нужно
Да как сказать. Назначить доступ определенному юзеру к определенному ресурсу можно только через группы.
При текущей постановке задачи будет мноооого групп. Это, конечно, не проблема, но как то непорядочек.
При текущей постановке задачи будет мноооого групп. Это, конечно, не проблема, но как то непорядочек.
согласен — всё зависит от цыфр…
Просто интерестная задача — сколько планируеться пользователей пустить, чтобы у каждого был именно свой настройки…
А правами — не обязательно плодить куча груп. Если вы хотите привязать пользователя к ресурсу (только мой) — пожалуста — плагин в 5 строчек… и есть такие замечательные поля у ресурса как show_in_tree, properties…
Просто интерестная задача — сколько планируеться пользователей пустить, чтобы у каждого был именно свой настройки…
А правами — не обязательно плодить куча груп. Если вы хотите привязать пользователя к ресурсу (только мой) — пожалуста — плагин в 5 строчек… и есть такие замечательные поля у ресурса как show_in_tree, properties…
В одной организации будет порядка 30-50 пользователей, организаций на начальный период — до 10. Итого до 500 личных групп… А связка будет один ко многим — один ресурс могут видеть несколько пользователей.
Создание как пользователей, так и групп будет автоматическое, единственное сомнение — не отразится ли это на общей нагрузке на сайт — если около 300-400 человек одновременно будут работать, не будет ли накладно постоянно проверять, к какой группе принадлежит пользователь, к какой группе ресурс, какие стоят разрешения и пр. Это ж сколько запросов постоянно…
Если использовать отдельную таблицу, то тут проще — выводить только ресурсы у которых есть связь с текущим пользователем, а при редактировании и сохранении перепроверять. Но редактирование будет реже, чем просто просмотр…
Думаю, попробую все-таки и то, и то — попробую взять положительные качества обоих решений, избавившись от отрицательных.
Создание как пользователей, так и групп будет автоматическое, единственное сомнение — не отразится ли это на общей нагрузке на сайт — если около 300-400 человек одновременно будут работать, не будет ли накладно постоянно проверять, к какой группе принадлежит пользователь, к какой группе ресурс, какие стоят разрешения и пр. Это ж сколько запросов постоянно…
Если использовать отдельную таблицу, то тут проще — выводить только ресурсы у которых есть связь с текущим пользователем, а при редактировании и сохранении перепроверять. Но редактирование будет реже, чем просто просмотр…
Думаю, попробую все-таки и то, и то — попробую взять положительные качества обоих решений, избавившись от отрицательных.
300-400 — тут накладка не в проверке прав будет, а в самой нагрузке на админку… никогда не пробовал такую нагрузку на админке.
Как я вижу.
1) урезать всё что можно — показывать только то, что действительно нужно… и отрезать не визуально а напрочь, чтобы не грузилась.
2) для работы с ресурсами с таким потоком менеджеров, я бы сделал отдельную красивую (даже можно склонировать модекса админку — никто не поймёт… ха-ха) админку с фронта. Но снова, нужно всё продумать, стоит ли овчинка вычинки. Но 800 рук я бы не пускал в админку… хотя х.з. его знает, не сталкивался.
Как я вижу.
1) урезать всё что можно — показывать только то, что действительно нужно… и отрезать не визуально а напрочь, чтобы не грузилась.
2) для работы с ресурсами с таким потоком менеджеров, я бы сделал отдельную красивую (даже можно склонировать модекса админку — никто не поймёт… ха-ха) админку с фронта. Но снова, нужно всё продумать, стоит ли овчинка вычинки. Но 800 рук я бы не пускал в админку… хотя х.з. его знает, не сталкивался.
Не-не, в админку я пускать не буду — сам буду решать, что отображать пользователям и в каком виде — только во фронтенде
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.