Николай Ланец
15 дек. 2014 г., 11:31

Вывод пункта меню без доступа к документу

Иногда бывают ситуации, когда надо, чтобы какой-то закрытый документ все-таки выводился в меню. Это особенно удобно тогда, когда на сайте не особо нужна авторизация, и пользователи не авторизовываются просто так, но из-за этого они не видят какие-то важные пункты меню, которые должны быть видны авторизованным пользователям. А так даже если документ закрытый, а в меню он есть, пользователь уже его видит, и если у него есть интерес к этому документу, он переходит на эту страницу, и если не авторизован, то ему выводится страница «Доступ запрещен» с формой авторизации/регистрации. Тогда пользователь авторизуется и получит доступ к документу. К сожалению, в MODX-е не предустановлена такая политика безопасности. Есть Load only, но тогда для этого документа не будет выводиться пункт меню, ибо для этого требуются права list. Есть Load, list and view, но это полные права, в том числе и на просмотр документа, то есть если документ должен быть доступен только определенным группам пользователей, а не всем, то нам эта политика не подходит априори. Нужна политика List and load, но её-то как раз и нет. Вот рассмотрим процесс создания такой политики.
1. Создаем новую политику безопасности и назовем ее List and load. Здесь важно указать шаблон политик безопасности — ObjectTemplate. ?
?
Созданная политика безопасности будет включать в себя сразу 5 правил, а нам нужно только два из них, поэтому открываем для редактирования политику и снимаем галочки с трех не нужных, оставляя только list и load.
?
?
2. Создаем группу ресурсов «Вывод в меню». Так как политики безопасности для документов основываются на группах ресурсов, то нам необходимо такую создать. При чем я не советую вам настраивать доступ List and load для анонимусов прям на ваши какие-то закрытые группы, так как явность в управлении сильно спадает. Лучше документ отнести сразу к двум группам, то есть одна группа будет обеспечивать доступ к документу для определенных групп пользователей (именно на просмотр), а вторая группа «Вывод в меню» будет обеспечивать видимость документа в меню.
?
?
3. Добавляем нужный нам ресурс в эту группу (галочка «Не показывать в меню» не должны быть установлена, иначе документ итак не выйдет в меню).
?
4. Даем анонимным пользователям доступ List and load к этой группе ресурсов. Для этого опять идем в «Контроль доступа» и редактируем группу пользователей.
?
?
На всякий случай сбрасываем права доступа.
?
На всякий случай всем группам пользователей добавьте доступ List and load к группе ресурсов «Вывод в меню». Это особенно критично в случаях, когда есть группы пользователей, которые не имеют доступа к этому ресурсу, и получится, что пользователь авторизовался (то есть он уже не анонимус) и в тоже самое время он не имеет доступа к этому ресурсу и у него этот ресурс пропадет из меню.
5. Не забудьте создать документ «Доступ закрыт» и в системных настройках указать его id в настройку unauthorized_page. К контент этого документа пропишите [[!Login]] или типа того (то есть выведите форму регистрации/авторизации на свое усмотрение).
Если вы все правильно сделали, то пользователям закрытый документ будет выводиться в меню, но при попытке захода на нее, если у пользователя нет доступа к этому документу (права view), MODX выдаст пользователю страницу «Доступ запрещен». Если вы правильно настроите форму авторизации, то авторизовавшись пользователь окажется на этой же странице, но уже с правом просмотра, что будет весьма юзабельно.

Добавить комментарий