2013-05-23 2 views
1

Я понимаю how to implement ACL and restrict access to controller methods.Показать/скрыть ссылки в MVC view на основе разрешений

Я не понимаю, как отображать определенные ссылки только для пользователей с определенными разрешениями в представлении? Может кто-нибудь, пожалуйста, продемонстрируйте, как это делается?

Единственные связанные ответы, которые я могу найти, относятся к ASP, который не имеет для меня никакого смысла.

ответ

0

Вы могли бы сделать что-то вроде этого:

if(user->logged_in()){ 
    $data = array('link' => $link1); 
} else { 
    $data = array('link' => $link2); 
} 

View::make('some-view)->with($data); 

По мнению:

<?php echo $link; ?> 

Это Princip вы должны передать в MVC Framework.

+1

Но технически мне сказали, что контроллер не должен передавать данные в представление, так как это нарушает односторонний поток шаблона. –

1

Если вы используете Zend Framework в соответствии с этой статьей, используйте помощник вида. Вызовите класс ACL, установите контроллер/пользователь и т. Д. И верните логическое значение.

<?php if ($this->acl()->hasPermissionToViewUri()): ?> 
    // show uri 
<?php endif ?> 
+1

Я не использую Zend, это для пользовательской структуры, поэтому я ищу ответы в целом. Увидеть, как это делают другие фреймворки. Спасибо. –

-2

Я всегда создаю функцию на Yii (каркас, который я использую), чтобы проверить доступ, чтобы увидеть или проникнуть в какой-то материал.

В Yii я использую это так:

if (Yii::app()->user->checkAccess('restricted_zone')) { 
    echo 'hurray i have access!'; 
} else { 
    echo 'do not have access! :('; 
} 

, используемый в расширении Yii: http://www.yiiframework.com/extension/rbam/

Вы можете использовать его везде, где вы хотите, чтобы ограничить то - модель, вид, контроллер и даже в вспомогательные классы, которые вы можете импортировать.

Вам просто нужно быть уверенным, что ваш класс готов к использованию по всему вашему коду.

+0

-1: опирается на глобальную сферу –

+0

И что? Это отлично, так как вы можете получить доступ к нему через все приложения. Я думаю, что это отличный подход. –

+1

facepalm недостаточно: [ –

Смежные вопросы