2010-10-29 6 views
1

Я создаю приложение с использованием cakePHP. Есть ли у нас метод, позволяющий публичным пользователям доступ к определенным страницам без входа в систему. Было бы несколько страниц, например, о нас в отношении всей организации или страницы контактов. Есть ли способ избежать доступа к логину, что-то похожее на то, как мы можем добавлять компоненты или устанавливать макеты.Имея действия/страницы без необходимости входа в систему

+0

вы можете использовать ACT + AUTH –

ответ

1

Как говорит Мартин Бин, вы можете использовать ACL. Для сложного сайта это было бы моим выбором. Вы не должны войти в систему, чтобы получить доступ к общедоступным страницам. http://multiheadweighers.co.uk - пример сайта, использующего ACL. За общедоступными страницами есть полнофункциональная CMS.

Для простого сайта я позволил бы доступ к, например, вид действия с использованием

function beforeFilter() { 
    parent::beforeFilter; 
    $this->Auth->allow('view'); 
} 

см: http://book.cakephp.org/view/1257/allow

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

EDIT:

Из книги @http://book.cakephp.org/view/1550/Setting-up-permissions

Теперь мы хотим взять из ссылки в auth-> allowedActions в ваших пользователей и группы контроллеров. Затем добавьте следуя на ваши посты и виджеты контроллеров:

function beforeFilter() 
{  
    parent::beforeFilter();  
    $this->Auth->allowedActions = array('index', 'view'); 
} 

Это снимает «выключатели» мы помещаем в ранее на контроллерах пользователей и групп, а также дает доступ общественности по индексу и просматривать действия в контроллерах сообщений и виджетов. В AppController :: beforeFilter() добавьте следующее:

$this->Auth->allowedActions = array('display'); 

Это делает общедоступным действие 'display'. Это сохранит нашу страницу PagesController :: display(). Это важно, так как часто по умолчанию маршрутизация имеет это действие в качестве домашней страницы для вашего приложения.

EDIT 2:

$user = ($this->Auth->user())?$this->Auth->user():'Anonymous'; 
    if(!$this->Acl->check($user,"{$url}")) 
     $this->redirect($this->referer()); // or whatever action you want to take. 
+1

не ACL используется для управления правами доступа для зарегистрированных пользователей ?? Как ACL будет участвовать в предоставлении незарегистрированным пользователям доступа к общедоступным страницам? Это должно быть сделано компонентом Auth, не так ли? Не могли бы вы объяснить, как ACL можно использовать для этого? – macha

+0

Да, но это не означает, что ВСЕ должно контролироваться ACL - могут быть исключения. См. Мое редактирование выше. Я столкнулся с некоторыми липкими ситуациями, когда мне приходилось делать что-то вроде моего второго редактирования. – Leo

+0

ACL и Auth работают вместе. – Leo

1

Решение должно заключаться в использовании метода allow в компоненте Auth, чтобы пользователь мог посещать эти страницы.

Спасибо!