Amy Anuszewski
Amy Anuszewski

Reputation: 1853

Allowing a Specific Page in Cakephp

I understand how to allow certain controller actions for non-logged in users. But, I can't find any documentation on how to allow access to specific pages. The controller is pages and the action is display. But, I don't want to allow the user to see all pages, just the about page.

So, what is the correct way to allow guests access to some, but not all, pages?

Upvotes: 5

Views: 3112

Answers (2)

ericgio
ericgio

Reputation: 3499

In CakePHP 3.x you can accomplish your goal by specifying the full action in the PagesController beforeFilter action:

public function beforeFilter(Event $event) {
  parent::beforeFilter($event);

  $this->Auth->allow(
    ['controller' => 'pages', 'action' => 'display', 'about']
  );
}

Upvotes: 1

vindia
vindia

Reputation: 1678

I'm afraid you can't do that using the standard functions that AuthComponent gives you. You have to create your own logic for that in the pages_controller's display action.

Something like (pseudo-code style)

# in app/controllers/pages_controller.php
var $allowedPages = array('one', 'two');

function display($page) {
    if(in_array($page, $allowedPages) || $this->User->loggedin) {
        $this->render($page);
    } else {
        $this->render('not_allowed');
    }
}

Upvotes: 4

Related Questions