отменить запрос в beforefilter () в PHP - PullRequest
0 голосов
/ 30 сентября 2010

Я использую CakePHP, CAS для аутентификации и ACL для авторизации.Если пользователь не имеет разрешения на просмотр страницы, мне нужно прошить сообщение о том, что он запрещен ИЛИ перенаправить на другую страницу.

Пример: если пользователь просматривает / users / view / 1. Теперь пользователь запрашивает/ пользователей / удалить / 1.Пользователь не имеет разрешения на удаление.Поэтому я хочу отобразить флэш-сообщение на странице, которую он запросил (/users/view/1).

В моем app_controller у меня есть следующая функция:

function beforeFilter() {
  $this->__initPhpCas();
  if (isset($_SESSION['loggedIn'])){
    if(!$this->Acl->check(.....){
        //User do not have permission to view the page.
        // Need to cancel this request and flash a message 
   }
  }

Любые предложенияприветствуются

Окончательный ответ

function beforeFilter() {
      $this->__initPhpCas();
      if (isset($_SESSION['loggedIn'])){
        if(!$this->Acl->check(.....){
            //User do not have permission to view the page.
            // Need to cancel this request and flash a message 
            $this->Session->setFlash(__('You are not authorized to view this page.', true));
        $this->redirect($_SERVER['HTTP_REFERER']);
       }
      }

1 Ответ

0 голосов
/ 30 сентября 2010

до перенаправить использовать $this->redirect(); и добавить сообщение с помощью $this->Session->setFlash();.Я включил ссылки, чтобы показать вам.

РЕДАКТИРОВАТЬ:

Я бы рекомендовал установить флэш-сообщение, а затем сделать перенаправление.Затем на перенаправленной странице отобразите флэш-сообщение с $session->flash();.

EDIT2:

Поскольку вы не хотите выполнять перенаправление, вам нужно будет сделать что-то подобное.

function view() {
    if($this->Acl->check(.....){
        //display the page and continue with the view action
    }
    else {
        $this->Session->setFlash("You do not have access to use this feature");
    }
}

РЕДАКТИРОВАТЬ 3:

Попробуйте это .Посмотрите на последний пост в ссылке.

Редактировать 4: Попробуйте использовать deny ()

Редактировать 5:

Если я вас понимаюправильно вы хотите использовать beforeFilter, чтобы проверить, есть ли у них доступ, а если нет, то не продолжайте выполнять действия.CakePHP на самом деле не позволяет этого, но есть обходной путь.

function beforeFilter() {
    if($this->Acl->check(.....){
        //display the page and continue with the view action
    }
    else {
        $this->Session->setFlash("You do not have access to use this feature");
        $this->params['action'] = "failedCheck";
    }
}

function failedCheck() {
    //blah blah blah
}
...