Функция автозапуска Symfony - PullRequest
       4

Функция автозапуска Symfony

0 голосов
/ 28 августа 2011

Я создал систему входа в систему в Symfony.На каждой странице, которая защищена , мне нужно подтвердить, что имя пользователя соответствует паролю.Я написал функцию: isValidAuth() в myUser.class.php .Тем не менее мне нужно написать следующие строки в действиях для каждой страницы:

if(!isValidAuth())
{
    $this->forward('home', 'logout');
}

, что довольно неудобно, если у вас есть несколько защищенных страниц и модулей.Можно ли как-нибудь запустить эти строки как функцию, если страница is_secured?Например, при доступе к executeIndex() при загрузке страницы?

Ответы [ 2 ]

1 голос
/ 28 августа 2011

В Symfony есть встроенная функция, которая справляется с этим.Это руководство предназначено для версии 1.2, но также должно работать для версии 1.4: http://www.symfony -project.org / book / 1_2 / 06-Inside-the-Controller-Layer .

, поскольку значения конфигурации в 1.4 изменились на true / false вместо включения / выключения, вам придется изменить их: http://www.symfony -project.org / reference / 1_4 / ru / 08-Безопасность

apps / frontend / modules / 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, который обеспечивает обработку пользователя, вход в систему и т. д. из коробки;)

0 голосов
/ 28 августа 2011

Лучшим местом для этого была бы цепочка фильтров, я бы даже предложил расширить sfBasicSecurityFilter.Чтобы включить расширенный класс, отредактируйте apps / myapp / config / filters.yml

rendering: ~
security:
  class: myExtendedSecurityFilter

# Generally, you will want to insert your own filters here

cache:     ~
execution: ~

Вместо того, чтобы расширять sfBasicSecurityFilter, вы также можете создать новый класс, расширяющий sfFilter.Подробнее о фильтрах читайте здесь:

http://www.symfony -project.org / gentle-Введение / 1_4 / ru / 06-Внутри-слой-контроллера # chapter_06_filters

...