Symfony2 Security.yml

Ela*_*hts 2 security authentication firewall access-control symfony

我正在尝试利用Symfony的身份验证和授权功能,但是我对我的security.yml文件看起来有点困惑.

我希望实现以下目标:

1)路由/和/ join(对每个人都是可用的 - 不需要登录).

2)所有其他路由都需要登录/密码.

3)/ adimin路由应仅限于管理员用户.

4)所有用户都应该针对数据库进行身份验证.

我有第4项想出来(我认为) - 见下文.我不确定这个administrators:词是什么意思.这是否只表示管理员使用User类?应该说users:还是其他什么?

security:
    encoders:
        MySite\Bundle\Entity\User:
            algorithm: sha1
            encode_as_base64: false
            iterations: 1

providers:
    administrators: (??? what doest his mean ???)
        entity: { class: MySiteBundle:User }
Run Code Online (Sandbox Code Playgroud)

更重要的是 -

对于第1,2和3项,我不知道该放什么.我在该firewalls:部分和access_control:部分下面有一堆条目然而它只是不起作用或有意义.有人可以发布什么security.yml应该看起来像我想要在数字1 - 3完成的目标?

小智 9

以下是我根据您的需求了解的配置示例:

security:
    encoders:
        "MySite\Bundle\Entity\User": { algorithm: sha1, encode_as_base64: false, iterations: 1 }

    providers:
        database: { entity: "MySite\Bundle\Entity\User" }

    firewalls:
        dev:
            pattern:    ^/(_profiler|_wdt|css|js)
            security:   false

        main:
            pattern:    ^/
            provider:   database
            anonymous:  true
            # the rest of your firewall's config

    access_control:
      - { path: ^/(join)?$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
      - { path: ^/, roles: IS_AUTHENTICATED_FULLY }
Run Code Online (Sandbox Code Playgroud)

我们为用户实体配置密码编码器,并为其定义提供程序.

然后我们定义一个dev防火墙来停用debug/profiler/asset pathes的安全性,以及一个main将成为应用程序真正防火墙的防火墙.最后一个防火墙将使用先前定义的用户提供程序并允许匿名用户(重要!).

最后,在访问控制映射中,我们首先为允许匿名用户的pathes定义规则,然后为需要用户对站点其余部分进行完全身份验证的通用规则.