cakephp: Как установить флэш-сообщение в пользовательском методе isAuthorized model? - PullRequest
0 голосов
/ 12 августа 2010

Привет, я относительно новичок в CakePHP. Я пытаюсь создать простое приложение, как обучение и практика. Я реализовал простую систему обработки пользователей с использованием компонента Auth. Я сделал собственный метод isAuthorized в пользовательской модели. После регистрации пользователь должен активировать себя, чтобы иметь возможность войти в систему. Если пользователь не активен, Авторизованный возвращает ложь, а также я хочу сообщить пользователю, что он не активирован. Но я не знаю, как установить флэш-сообщение внутри этого метода (я пытался без успеха).

function isAuthorized($user, $controller, $action) { 
 // We have simply user-rights system. There are admins and non-admins.
 // This function makes a decision if the user have rights to do what requested.
  if($user['User']['active']==0) { // if the user has not been activated yet then gets no rights
   $authed=false;
   $this->Auth->authError = __("Please activate your user first!",true);
  } else {
   $this->Auth->authError = __("Sorry, you do not have access to this area.",true);
   if($user['User']['admin']==1) { //all admins has all rights
    $authed=true;
   } else {
    if($controller=='Areas' or $controller=='Rooms' or $controller=='Categories') {
     if($action=='read') {
      $authed=true;
     } else {
      $authed=false; //non-admin users are not authorized to add or edit rooms or areas
     }
    } else {
     $authed=true; // however they are allowed to do other tasks. the per task rights are controlled within the controllers
    }
   }
  }
  //debug($authed);
  return $authed;

Как видите, я пытался, но потерпел неудачу :), это не работает.

Я тоже пытался поставить

$this->Auth->authError = __("Please activate your user first!",true);

в контроллере пользователя логин () без успеха

1 Ответ

1 голос
/ 13 августа 2010

Я понял, что компонент Auth активируется раньше, чем метод контроллера, и предпринимает действия, если пользователь не авторизован, что означает, что он перенаправляет до , когда контроллер может изменить authError.Вот почему я получаю свой «стандартный» authError.

Поскольку я использую пользовательскую функцию авторизации (в модели), пользователь уже аутентифицирован (если есть запись), и часть Auth переменных сеанса установлена,Поэтому, если я проверяю данные аутентификации сеанса, я могу решить в контроллере, является ли пользователь авторизованным и не активированным.Затем я установил флэш-сообщение, чтобы пользователю сообщалось об ошибке аутентификации от компонента auth (нет доступа к этой области) и другое сообщение как обычное флэш-сообщение, чтобы активировать себя.

function login() {
    if(empty($this->Auth->data) and $this->Session->read('Auth.User.active')===0){
        $this->Session->setFlash(__('Please activate your user first.',true));
    }
}

Полагаю, это не самый элегантный способ решить эту проблему;), но я новичок в веб-программировании и также CakePHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...