Symfony2:JMSSecurityExtraBundle:@PreAuthorize中的#id == user.getId()无法正常工作

时间:2013-03-18 17:14:34

标签: symfony annotations

我尝试通过@PreAuthorize注释(Symfony2 2.1.8)访问控制器中的函数:

当我写:

/*    
* @PreAuthorize("hasRole('ROLE_ADMIN') or #id == '5'")
*/

public function editAction($id){ 
(...)

我可以通过 但是当我使用:

/*    
* @PreAuthorize("hasRole('ROLE_ADMIN') or #id == user.getId()")
*/

public function editAction($id){ 
(...)

我收到“令牌没有所需的角色。”错误,是的,我使用正确的ID进行了记录和身份验证...

有人在想吗?

1 个答案:

答案 0 :(得分:2)

好吧,我想通了......

基本上,PreAuthorize注释正在执行此操作

user.getId() === '5'

其中getId返回一个整数并对字符串进行比较。我设法通过将此方法添加到我的用户实体来实现它:

public function getStringId()
{
    return (string) $this->id;
}

然后将注释更改为此

@PreAuthorize("user.getStringId() == '2' and hasRole('ROLE_ADMIN')")

希望有所帮助!