2013-09-11 6 views
4

Я использую Symfony2 для своего проекта, и я создал две страницы. Одна страница входа и одна индексная страница. Я успешно зарегистрировал учетную запись администратора (с ROLE_ADMIN).
Однако я получил 403 Forbidden страницу со следующей ошибкой:Symfony2 - Access Denied

ERROR - Uncaught PHP Exception
Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException: "Access Denied" at .\vendor\symfony\symfony\src\Symfony\Component\Security\Http\Firewall\ExceptionListener.php line 100

И это мой конфиг в security.yml:

access_control: 
    - { path: ^/vs/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/vs/index, roles: ROLE_ADMIN } 

когда я var_dump пользователя. Я вижу, что роли пусто:

private 'roles' => 
    object(Doctrine\ORM\PersistentCollection)[293] 
     private 'snapshot' => 
     array (size=0) 
      empty 

И это роли из моего User.php:

/** 
* @ORM\ManyToMany(targetEntity="Role", inversedBy="users") 
* @ORM\JoinTable(name="user_role", 
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, 
* inverseJoinColumns={@ORM\JoinColumn(name="role_id", referencedColumnName="id")} 
*) 
*/ 
private $roles; 

И это то, что я получаю при использовании $user->getRoles():

array (size=1) 
    0 => 
    object(...\Entity\Role)[397] 
     private 'id' => int 1 
     private 'name' => string 'admin' (length=5) 
     private 'role' => string 'ROLE_ADMIN' (length=10) 
     private 'users' => 
     object(Doctrine\ORM\PersistentCollection)[398] 
      private 'snapshot' => 
      array (size=0) 

Что я сделал не так?

+0

http://symfony.com/doc/current/cookbook/security/entity_provider.html#managing-roles-in-the-database – lackovic10

+0

Да, после этого учебника. – rukabillaan

+0

Какой маршрут используется для перенаправления после входа? Это '/ vs/index'? Кстати, вы должны использовать '\ Doctrine \ Common \ Util \ Debug :: dump ($ entity)' вместо 'var_dump ($ entity)', когда имеете дело с объектами Doctrine. –

ответ

1

Соотношение аннотаций доктрины были неправы:

/** 
* @ORM\ManyToMany(targetEntity="Role", inversedBy="users") 
*/ 
private $roles; 

/** 
* @ORM\ManyToMany(targetEntity="User", mappedBy="roles") 
*/ 
private $users;