尽管我的用户在数据库中拥有角色,但始终403拒绝在symfony2中访问

时间:2015-03-10 14:35:18

标签: mongodb symfony fosuserbundle symfony-security

我一直拒绝访问, 这是我的security.yml

security:
    role_hierarchy:
        Livreur:       Livreur
        Producteur:    Producteur
        Admin:         Admin

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username

    encoders:
        FOS\UserBundle\Model\UserInterface: sha512

    firewalls:
        main:
            pattern: ^/
            form_login:
                provider: fos_userbundle
                csrf_provider: form.csrf_provider
            logout:       true
            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: Admin }

我想访问{url} /app_dev.php/admin,总是403!

我正在使用mongodb数据库,这是我在mongo中的文档:

  

db.User.find().pretty()
{
        "_id" : ObjectId("54fef590a98a93842000002e"),
        "username" : "admin",
        "usernameCanonical" : "admin",
        "email" : "admin@email.com",
        "emailCanonical" : "admin@email.com",
        "enabled" : true,
        "salt" : "flxrknwannwow0swccwk000gw44kwgg",
        "password" : "u8d6fIrwTGF/x2FYhJxootw8MU4PR3KvY5mUjwLn9ZPBxA1foi0ox/OVif
9HIipz/cTIdvghJNKsdXljCR6MVA==",
        "locked" : false,
        "expired" : false,
        "roles" : {
                "0" : "Admin"
        },
        "firstName" : "xxxx",
        "lastName" : "xxx",
        "numTel" : "xxxx",
        "adresse" : "xxxxx",
        "lastLogin" : ISODate("2015-03-10T14:22:38Z")
}

the return of $document->getRoles() is 
["ADMIN","ROLE_USER"] 

如果我为当前用户进行测试,我得到:

$this->container->get('security.context')->isGranted('Admin') 
or
$this->container->get('security.context')->isGranted('ADMIN') 

它总是返回FALSE

请帮助

1 个答案:

答案 0 :(得分:1)

我认为所有角色名称都应以ROLE_ - prefix开头 您需要使用ROLE_ADMIN。 我有类似的问题,但是当我改变角色名称时 - 问题已经解决了。