注册和重置表始终可用

时间:2014-08-12 20:55:00

标签: symfony fosuserbundle symfony-2.5

今天我注意到无论我是否经过身份验证,我都可以随时访问注册表并重置表单。

这是我的security.yml:

security:
    encoders:
        FOS\UserBundle\Model\UserInterface: sha512

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username

    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            pattern: ^/
            form_login:
                provider: fos_userbundle
                csrf_provider: form.csrf_provider
            logout:
                delete_cookies:
                    activeGame: {}
            anonymous:    true

    access_control:
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin/, role: ROLE_ADMIN }

关于http://symfony.com/doc/current/cookbook/security/remember_me.html#forcing-the-user-to-re-authenticate-before-accessing-certain-resources似乎"正常"能够访问这些页面。

但我怎样才能轻松"为经过身份验证的用户禁用它还是我错过了什么?

提前致谢!

1 个答案:

答案 0 :(得分:3)

您可以通过使用新引入的访问控制的allow_if表达式来完成您要查找的内容。

- { path: ^/register, allow_if: "not is_authenticated()" }

另一种方式可能是:

- { path: ^/register, allow_if: "user == 'anon'" }

我还没有对此进行全面测试,但它应该只允许完全未经过身份验证或经过身份验证的用户访问该路径

以下是security

的一些内容

Here are some of the variable and functions available in expressions

然后,您可以在allow_if

中使用Expressions上的一些信息

但是,如果登录用户尝试访问这些页面,则不希望抛出403拒绝访问异常。相反,您希望将它们重定向到其他位置,然后您可以将检查添加到各自的控制器操作中。类似的东西:

public function registerAction()
{
    if (true === $this->get('security.context')->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
        return $this->redirect($this->generateUrl('some_route_to_send_them_to'));
    }

    // ...
}