Я построил систему входа в систему в Symfony. На каждой странице, которая защищена , мне нужно проверять, соответствует ли имя пользователя паролю. Я написал функцию: isValidAuth()
в myUser.class.php . Тем не менее, мне нужно написать эти строки в действиях для каждой страницы:
if(!isValidAuth())
{
$this->forward('home', 'logout');
}
Что довольно неудобно, когда у вас есть несколько защищенных страниц и модулей. Есть ли способ запустить эти строки как функцию, если страница is_secured
? Как при доступе к executeIndex()
при загрузке страницы?
2 ответа
Лучшее место для этого - цепочка фильтров, я бы даже предложил расширить sfBasicSecurityFilter. Чтобы включить расширенный класс, отредактируйте apps / myapp / config / filters.yml
rendering: ~
security:
class: myExtendedSecurityFilter
# Generally, you will want to insert your own filters here
cache: ~
execution: ~
Вместо расширения sfBasicSecurityFilter вы также можете создать новый класс, расширяющий sfFilter. Подробнее о фильтрах читайте здесь:
В Symfony есть встроенная функция, которая справляется с этим. Руководство предназначено для версии 1.2, но оно также должно работать и для версии 1.4: http://www.symfony-project.org/book/1_2/06-Inside-the-Controller-Layer.
Поскольку значения конфигурации в 1.4 изменились на true / false вместо on / off, вам придется изменить их: http://www.symfony-project.org/reference/1_4/en/08-Security
Приложения / интерфейс / модули / mymodule / config / security.yml
all:
is_secure: true # for all actions of a module
foo:
is_secure: false # action foo is public
В apps / frontend / config / settings.yml вам нужно будет указать модуль и действие, которое выполняет вход в систему и т. д.
all:
.actions:
login_module: default
login_action: login
secure_module: default
secure_action: secure
И последнее, но не менее важное: вам нужно установить флаг аутентификации для вашего пользователя (обычно после входа в систему;)):
$this->getUser()->setAuthenticated(true);
Кстати. возможно, вам следует установить плагин sfdoctrineguardplugin, который обеспечивает обработку пользователей, вход в систему и т. д. из коробки;)
Похожие вопросы
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.