CakePHP ACL генерирует разные ссылки для разных групп

Используя ACL CakePHP 2.0, я создал 2 группы. Один из них – admin, а один – посетитель. Теперь администратор может добавлять и загружать изображения, и посетители могут просто просматривать изображения, если они нажимают кнопку «Добавить» или «Удалить», они не позволят им ничего делать. Каков наилучший способ удалить эти ссылки для группы посетителей? Если я проверю, какая группа принадлежит к использованию инструкции if / else, это было бы лучшим решением?

Solutions Collecting From Web of "CakePHP ACL генерирует разные ссылки для разных групп"

Чтобы скрыть ссылки, которые приводят к действиям, которые пользователь не имеет права выполнять, представления должны каким-то образом знать права пользователя. Вы можете проверить эти разрешения, проверив группу, к которой принадлежит пользователь, но это будет означать, что вы больше не будете полагаться на разрешения ACL. Поэтому любое обновление разрешений ACL должно быть указано в коде. Не очень удобно.

Тогда что еще ? Подход заключается в проверке прав пользователя в контроллере, как правило, во время входа в систему, а затем сохранить эти разрешения в сеансе. Затем разрешения в сеансе можно проверить в представлениях, чтобы скрыть или показать некоторые части представлений. Здесь вы можете найти пример этого метода:

Но для ссылок конкретно вы можете пойти немного дальше и не писать тесты в представлениях. Я использую хелпер, который наследует от HtmlHelper и переопределяет метод link (). В основном он работает по одной и той же идее: внутри метода overriden link () разрешено действие на целевом действии, а помощник возвращает ссылку или ничего, если пользователю не разрешен доступ к целевому действию.

Если вы хотите попробовать мой код, вы можете использовать мой плагин Acl

В своем AppController установите разрешения:

var $components = array(..., 'Acl.AclManager'); function beforeFilter() { ... //you can put it here as the permissions check is performed only once per session $this->AclManager->set_session_permissions(); ... } 

И в ваших представлениях используйте AclHtmlHelper

 $this->AclHtml->link(...); 

Общее замечание о принципе, на котором основан этот метод: все разрешения проверяются при входе в систему. Если в приложении много действий, это может значительно замедлить вход в систему.

Более эффективным подходом может быть проверка разрешения пользователя для каждого действия только тогда, когда это необходимо, что означает, когда вызывается метод link (). Но это означало бы, что помощник должен будет сам проверить разрешение Acl, и это каким-то образом нарушит модель MVC. И в основной библиотеке проверка Acl тесно связана с компонентом.