CakePHP: всегда ли мне нужно использовать isAuthorized()?

#cakephp

#cakephp

Вопрос:

Как я понимаю, isAuthorized() функция CakePHP используется для проверки того, имеет ли вошедший в систему пользователь набор разрешений для выполнения данного действия; другими словами, она не предназначена для проверки того, правильный ли у пользователя логин / пароль (для этого login() и предназначена). Поскольку приложение, которое я пишу, на самом деле не имеет никаких разрешений, а просто должно проверить, вошел пользователь в систему или нет, я написал следующую функцию isAuthorized():

 public function isAuthorized() {
    return true;
    }
  

Но … это просто кажется неправильным. Я смотрю на вышеупомянутую функцию и, честно говоря, она выглядит как что-то из TheDailyWTF. (И CakePHP жалуется, если у меня нет isAuthorized() функции, поэтому я не могу ее удалить).

Итак, я просто хотел бы спросить, чтобы убедиться, что я не ошибаюсь: если моему приложению нужно только увидеть, вошел пользователь в систему или нет, без каких-либо дополнительных разрешений, будет ли достаточно вышеупомянутой функции?

Комментарии:

1. покажите свою настройку авторизации. Вам не нужна функция isAuthorized().

Ответ №1:

Я так понимаю, вы используете компонент аутентификации Cake, поскольку именно здесь расположена функция isAuthorized().

Самый быстрый способ обойти это — определить ваши «разрешенные действия» в beforeFilter() вашего контроллера.

Например, чтобы разрешить всем доступ ко всем действиям:

 /**
 * Sets all actions to be allowed
 */
public function beforeFilter() {
  parent::beforeFilter();
  if (isset($this->Auth)) {
    $this->Auth->allow('*');
  }
}
  

Чтобы разрешить доступ к действиям ‘index‘ и ‘view‘:

 /**
 * Allow access to index amp; view actions
 */
public function beforeFilter() {
  parent::beforeFilter();
  if (isset($this->Auth)) {
    $this->Auth->allowedActions = array('index', 'view');
  }
}
  

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

Следующие комментарии ниже:

Вы можете установить авторизацию имущества авт компонент ‘Controller’ и затем определить функцию обратного вызова. Таким образом, ваш контроллер будет содержать что-то похожее на:

 public function beforeFilter() {
  parent::beforeFilter();
  $this->Auth->authorize = 'controller';
}

public function isAuthorized() {
  return true; 
}
  

Таким образом, вам не пришлось бы менять ядро, и оно делало бы то, что вам было нужно.

Комментарии:

1. Спасибо за ваш ответ. Это то, что я делал, чтобы разрешить доступ к странице входа для всех. Но если, помимо этого, у меня нет никаких других «уровней авторизации» в приложении (т. Е. Если каждый зарегистрированный пользователь может получить доступ к каждой странице сайта), можно ли оставить функцию isAuthorized() как есть? Или я мог бы просто удалить его?

2. Спасибо, теперь я понял, подумав об этом: «авторизация» и «аутентификация» — это разные вещи, и мне нужна просто аутентификация. Что я сделал в итоге, так это сделал $this->Auth->authorize = false . Я на правильном пути, или я пропустил что-то еще?

3. Просто для дальнейшего использования. Чтобы разрешить все действия в cake 2, используйте $this->Auth->allow() без ‘*’