【发布时间】:2014-12-09 01:53:14
【问题描述】:
是否可以动态地将角色授予当前用户(我)?
我正在本地计算机上开发网站,服务器正在托管网站的生产版本。 2 个版本(dev 和prod)使用了使用 CAS 服务器的身份验证系统,我们更改了防火墙以避免在dev 环境中使用此身份验证系统。但是在本地工作时,我仅以匿名用户身份登录,防火墙配置为仅当匿名用户从127.0.0.1 地址连接时才允许访问管理。所以我可以看到管理的任何部分,但我无法在开发过程中模拟不同角色的访问。
换句话说,我正在寻找这样的东西:
class AcmeController
{
public AcmeAction()
{
...
$user->setRole('ROLE_ADMIN');
...
}
}
或任何其他方式来设置角色。
更新:
我对此进行了测试:
class AcmeController
{
public AcmeAction()
{
...
$user = $this->getUser();
$user->setRole('ROLE_ADMIN');
...
}
}
这带来了一个致命错误:
致命错误:在 [...]AcmeController.php 行 [...] 中的非对象上调用成员函数 addRole()
我认为这是由于当前用户是匿名的,所以它在数据库中不存在,我无法访问 User 对象。
【问题讨论】:
-
为什么不直接授予
userROLE_SUPER_ADMIN并在role_hierarchy中的security.yml中定义它,以便包装所有 角色? -
@jperovic : 已经是这样了,但是当我根本没有登录时,我不知道如何授予这个角色。
-
如果你没有登录,你不能使用$this->getUser(),它会返回null... 为什么没有从你的数据库中获取用户? $user=$em->getRepository('AppAcmeBundle:User')->find(YOUR_ID); ?
标签: php security symfony firewall roles