Symfony2 - 访问被拒绝
Posted
技术标签:
【中文标题】Symfony2 - 访问被拒绝【英文标题】:Symfony2 - Access Denied 【发布时间】:2013-09-15 11:50:49 【问题描述】:我在我的项目中使用 Symfony2,并创建了两个页面。一个登录页面和一个索引页面。我已成功登录管理员帐户(ROLE_ADMIN
)。
但是我收到 403 Forbidden page 并出现以下错误:
错误 - 未捕获的 php 异常 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 用户时。我看到 roles 是空的:
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)
我做错了什么?
【问题讨论】:
symfony.com/doc/current/cookbook/security/… 是的,我按照本教程进行操作。 登录后重定向使用哪个路由?是/vs/index
吗?顺便说一句,在处理 Doctrine 实体时,您应该使用 \Doctrine\Common\Util\Debug::dump($entity)
而不是 var_dump($entity)
。
对我有用,刚刚尝试过。也许您可以发布整个用户和角色实体。也许这是一些愚蠢的东西,比如一个错字或什么的。并确保在数据库中为用户添加角色:)
这里是我的注释: /** * @ORM\ManyToMany(targetEntity="Role", inversedBy="users") * / private $roles; /* * @ORM\ManyToMany(targetEntity="User", mappedBy="roles") */ private $users;首先尝试更改这些
【参考方案1】:
教义关系注释错误:
/**
* @ORM\ManyToMany(targetEntity="Role", inversedBy="users")
*/
private $roles;
/**
* @ORM\ManyToMany(targetEntity="User", mappedBy="roles")
*/
private $users;
【讨论】:
以上是关于Symfony2 - 访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章
#1045 - 用户 'root'@'localhost' 的访问被拒绝(使用密码:YES)MAMP MySQL 访问被拒绝