Я хотел бы выяснить, какая стратегия лучше всего подходит для манипулирования внешним видом ссылок, форм и элементов DOM (показать / скрыть) на верхнем уровне мультимодульного приложения (admin, default и т. Д.) ??
Это должно быть сделано через ACL и его использование, я хорошо знаю, разрешения хранятся в БД.
Если кто-то пытается получить доступ к определенной странице (модуль / контроллер / действие), которая ему не разрешена, передается информационная страница, которая говорит, что он не разрешен. В этом случае все элементы видны.
У меня есть несколько стратегий манипулирования внешним видом элементов:
Для установки в контроллере
$this->view->allow_delete_link = $acl->isAllowed($role, 'delete_post'); // boolean
и спросить в файле представления, является ли оно истинным или ложным, и показать / скрыть
<?php if ($this->allow_delete_link): ?>[link html] <?php endif; ?>
Недостаток в том, что если у меня 50 ссылок на странице, мне понадобится 50 строк кода в моем контроллере, где я это делаю, и мне это не очень нравится.
Аналогичен первому, за исключением того, что ACL является статическим классом, поэтому файл представления спрашивает:
<?php if(My_Custom_Acl::getIsAllowed('some_resource', 'delete_post_action'){ echo 'link'; } ?>
Чтобы создать один помощник вида, который я буду вызывать при создании каждой ссылки, в которой я спрашиваю, есть ли у пользователя, вошедшего в систему, доступ, если да, вернуть всю ссылку, если нет, вернуть "" или false.
Просмотр помощников очень медленный, так что это мое последнее средство.
Чтобы создать отдельный файл view.phtml для каждой группы пользователей, затем в контроллере, в котором зарегистрирован пользователь, отобразите соответствующий вид.
$ This-> Render ( 'xx_view');
Это нарушает DRYS, поэтому я думаю, что этот метод не подходит.
Есть ли какая-то другая стратегия для чего-то подобного, потому что я уже вижу, что у меня будет головная боль, если я выберу любую из этих 4.
Может быть, какой-нибудь существующий плагин / класс для этого будет лучшим?
спасибо заранее!
Я забыл упомянуть, что я использую Zend Framework и Zend_Acl.