#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() без ‘*’