Блокировать доступ к страницам в 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'); он разрешает все после '\' страниц.. или, если вы не разрешаете, кроме отображения страницы, вы ничего не делаете.