Блокировать доступ к страницам в cakePHP

Как заблокировать доступ к любой странице в cakePHP. Под страницей я имею в виду фактические просмотры, лежащие в папке Page.

Когда я удаляю эту строку, она работает, но также не дает пользователям войти в систему. Это создает прямой цикл:

$this->Auth->allow('display');

По сути, когда пользователь хочет просмотреть любую страницу, и он не вошел в систему, они будут перенаправлены на вход (app/users/login) страница. После того, как они войдут в систему, они будут перенаправлены на страницу, к которой последний раз пытались получить доступ.

Как бы я пошел по этому поводу?

2 ответа

Решение

Проблема в вашей ситуации состоит в том, что все страницы, показанные pagesController, являются одним и тем же действием (display()), только используя другой параметр (страница для отображения). Поэтому вы не можете заблокировать доступ к действию отображения, потому что это заблокирует доступ ко всем страницам.

Если количество страниц ограничено, то самый простой способ реализовать это ControllerAuthorize, Прочитайте документацию здесь; Использование ControllerAuthorize

class AppController extends Controller {
    public $components = array(
        'Auth' => array('authorize' => 'Controller'),
    );
    public function isAuthorized($user = null) {
        // Make all actions public 
        return true;
    }
}

Затем внутри ваших страниц контроллер;

class PagesController extends AppController {

    public function isAuthorized($user = null) {
        if ('display' !== $this->request->action) {
            // other actions; let he AppController handle access
            return parent::isAuthorized($user);
        }

        if (!empty($user)) {
            // Logged-in users have access to any page
            return true;
        }

        $page = empty($this->request->params['pass'][0]) ? null : $this->request->params['pass'][0];

        switch($page) {
            case 'home':
            case 'about':
            // etc
               return true;
        }

        // all other pages are 'private'
        return false;
    }
}

Просто пример, конечно, изменить, чтобы соответствовать вашим потребностям

Используйте $this->Auth->allow('\','display'); он разрешает все после '\' страниц.. или, если вы не разрешаете, кроме отображения страницы, вы ничего не делаете.

Другие вопросы по тегам