Symfony自动运行功能

时间:2011-08-27 20:33:00

标签: php symfony1 symfony-1.4

我在Symfony中构建了一个登录系统。在受保护的每个页面上我需要验证用户名是否与密码匹配。我在 myUser.class.php 中写了一个函数:isValidAuth()。不过,我需要在每个页面的操作中写下这些行:

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

当您有多个受保护的页面和模块时非常不方便。如果页面is_secured,我有没有办法像函数一样运行这些行?就像在页面加载时访问executeIndex()一样?

2 个答案:

答案 0 :(得分:1)

Symfony中有一个内置功能可以处理这个问题。 manaual适用于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的/配置/ 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,提供开箱即用的用户处理,登录等;)

答案 1 :(得分:0)

最好的地方是过滤链,我甚至建议扩展sfBasicSecurityFilter。要启用扩展类,请编辑apps / myapp / config / filters.yml

rendering: ~
security:
  class: myExtendedSecurityFilter

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

cache:     ~
execution: ~

您还可以创建一个扩展sfFilter的新类,而不是扩展sfBasicSecurityFilter。在此处阅读有关过滤器的更多信息:

http://www.symfony-project.org/gentle-introduction/1_4/en/06-Inside-the-Controller-Layer#chapter_06_filters