Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony isgrated返回FALSE,用户扩展FOSUserBundle_Symfony_Fosuserbundle - Fatal编程技术网

Symfony isgrated返回FALSE,用户扩展FOSUserBundle

Symfony isgrated返回FALSE,用户扩展FOSUserBundle,symfony,fosuserbundle,Symfony,Fosuserbundle,为了简单起见,我没有在security.yml上使用role_层次结构 我有一个登录用户。如果我在控制器上执行此操作: dump($this->get('security.token_storage')->getToken()->getUser()->getRoles()); 这就是我得到的: array:3 [▼ 0 => "ROLE_SUPER_ADMIN" 1 => "ROLE_ADMIN" 2 =>

为了简单起见,我没有在security.yml上使用role_层次结构

我有一个登录用户。如果我在控制器上执行此操作:

dump($this->get('security.token_storage')->getToken()->getUser()->getRoles());
这就是我得到的:

array:3 [▼
0 => "ROLE_SUPER_ADMIN" 
1 => "ROLE_ADMIN" 
2 => "ROLE_USER"
]
Usuario {#2290 ▼
#id: 3
#username: "u1"
#usernameCanonical: "u1"
#email: "u1"
#emailCanonical: "u1"
#enabled: true
#salt: "8wqvgv5t24g0ssck44gw4008c04g8sg"
#password:        "zfDmozi78wrglXx3SUaCiz7490o4ZzKYEukcbdlCQ5FAWpA4jgLFQT6BXNbo3tzTyhdPDOCC/h4ZDs32SKlGEw=="
#plainPassword: null
#lastLogin: DateTime {#2288 ▶}
#confirmationToken: null
#passwordRequestedAt: null
#groups: null
#locked: false
#expired: false
#expiresAt: null
#roles: array:2 [▼
0 => "ROLE_SUPER_ADMIN"
1 => "ROLE_ADMIN"
]
#credentialsExpired: false
#credentialsExpireAt: null
}
但是如果我请求Is,我只会在“角色\用户”上得到true,其余的都是false:

dump($this->get('security.authorization_checker')->isGranted('ROLE_USER'));
dump($this->get('security.authorization_checker')->isGranted('ROLE_ADMIN'));
dump($this->get('security.authorization_checker')->isGranted('ROLE_SUPER_ADMIN'));
给我:

true
false
false
我使用的是FOSUserBundle,我的用户扩展了他们的BaseUser(这反过来实现了UserInterface),我没有在我的用户实体上使用它的任何方法

你能发现问题吗?是因为我不能将security.checker与FOSUSerBundle一起使用吗

更新: 如果我转储($this->getUser()),这就是我得到的:

array:3 [▼
0 => "ROLE_SUPER_ADMIN" 
1 => "ROLE_ADMIN" 
2 => "ROLE_USER"
]
Usuario {#2290 ▼
#id: 3
#username: "u1"
#usernameCanonical: "u1"
#email: "u1"
#emailCanonical: "u1"
#enabled: true
#salt: "8wqvgv5t24g0ssck44gw4008c04g8sg"
#password:        "zfDmozi78wrglXx3SUaCiz7490o4ZzKYEukcbdlCQ5FAWpA4jgLFQT6BXNbo3tzTyhdPDOCC/h4ZDs32SKlGEw=="
#plainPassword: null
#lastLogin: DateTime {#2288 ▶}
#confirmationToken: null
#passwordRequestedAt: null
#groups: null
#locked: false
#expired: false
#expiresAt: null
#roles: array:2 [▼
0 => "ROLE_SUPER_ADMIN"
1 => "ROLE_ADMIN"
]
#credentialsExpired: false
#credentialsExpireAt: null
}


如您所见,FSO只需在getRoles()中添加“ROLE\u USER”方法,因为它不存在于实际的角色数组中。

再次注销和重新登录将解决问题。

再次注销和重新登录将解决问题。

再次注销和重新登录将解决问题。

再次注销和重新登录将解决问题。

因此用户有三个单独的角色在数据库中分配给它?我刚刚使用您的代码测试了它,它为我正确返回(但我有层次结构)。你能把
$this->getUser()
放在这里吗?更新了!我真的不知道问题出在哪里。谢谢你帮助我@bassplayer7。真奇怪。我会继续考虑的。你使用XDebug吗?你有没有用这个来解决问题?您是否注销并再次登录?因此用户在数据库中有三个单独的角色分配给它?我刚刚使用您的代码测试了它,它为我正确返回(但我有层次结构)。你能把
$this->getUser()
放在这里吗?更新了!我真的不知道问题出在哪里。谢谢你帮助我@bassplayer7。真奇怪。我会继续考虑的。你使用XDebug吗?你有没有用这个来解决问题?您是否注销并再次登录?因此用户在数据库中有三个单独的角色分配给它?我刚刚使用您的代码测试了它,它为我正确返回(但我有层次结构)。你能把
$this->getUser()
放在这里吗?更新了!我真的不知道问题出在哪里。谢谢你帮助我@bassplayer7。真奇怪。我会继续考虑的。你使用XDebug吗?你有没有用这个来解决问题?您是否注销并再次登录?因此用户在数据库中有三个单独的角色分配给它?我刚刚使用您的代码测试了它,它为我正确返回(但我有层次结构)。你能把
$this->getUser()
放在这里吗?更新了!我真的不知道问题出在哪里。谢谢你帮助我@bassplayer7。真奇怪。我会继续考虑的。你使用XDebug吗?你有没有用这个来解决问题?你是否注销并再次登录?谢谢,这对我很有效,我很生气:)没问题。会话存储角色信息,因此必须清除。谢谢你,这对我很有用,我很生气:)没问题。会话存储角色信息,因此必须清除。谢谢你,这对我很有用,我很生气:)没问题。会话存储角色信息,因此必须清除。谢谢你,这对我很有用,我很生气:)没问题。会话存储角色信息,因此必须将其清除。