Php Bug Symfony2 isgrated(';我的角色';)返回true,但防火墙返回403
在我的用户使用Php Bug Symfony2 isgrated(';我的角色';)返回true,但防火墙返回403,php,symfony,firewall,roles,access-control,Php,Symfony,Firewall,Roles,Access Control,在我的用户使用AuthenticationSuccessHandlerInterface侦听器登录后,我正在动态地向他添加一个角色 public function onAuthenticationSuccess(Request $request, TokenInterface $token) { $user = $this->security->getToken()->getUser(); $user->addRole('MY_ROLE'); v
AuthenticationSuccessHandlerInterface
侦听器登录后,我正在动态地向他添加一个角色
public function onAuthenticationSuccess(Request $request, TokenInterface $token)
{
$user = $this->security->getToken()->getUser();
$user->addRole('MY_ROLE');
var_dump($this->security->isGranted('MY_ROLE'));
var_dump($this->security->getToken()->getRoles()); die;
return new RedirectResponse('...');
}
两个var_dump()都显示$user
获得了新的权限。
我制作了User
类实现了equalInterface
类,并在其中制作了一个isEqualTo
函数,以便在更改用户数据时重新加载数据,而无需任何注销
public function isEqualTo(UserInterface $user)
{
return false;
}
但是当我的侦听器重定向到达时,我在一个没有分析器的白色页面中获得了一个访问被拒绝的
access_control:
- { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/login/check$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: MY_ROLE }
我已经尝试在类中设置角色(在代码中不是动态的),它可以工作,所以防火墙似乎可以工作,除了动态设置的数据,即使我重新加载用户
你知道那里出了什么问题吗?你可以尝试在你的应用程序/security.yml中添加以下内容:
security:
always_authenticate_before_granting: true
您可以尝试将其添加到您的应用程序/security.yml中:
security:
always_authenticate_before_granting: true
最后,我使用一个带有
安全性.interactive\u login
和内核.request
事件的事件侦听器绕过了这个问题
我在会话中(在为security.interactive\u login
事件注册的操作中)设置一个键,并签入内核。如果该键设置为做一件事或另一件事,则请求事件(捕获对网站的每次调用)
希望这能帮助一些人…我最终绕过了这个问题,使用了一个带有安全性、交互式登录和内核、请求事件的事件侦听器
我在会话中(在为security.interactive\u login
事件注册的操作中)设置一个键,并签入内核。如果该键设置为做一件事或另一件事,则请求事件(捕获对网站的每次调用)
希望这可以帮助某人…在您的角色丢失后重定向。确保将其保存在数据库中。为什么要将角色添加到用户中,然后在令牌上调用getRoles()
?@xabbuh,因为他想查看角色是否正确设置为用户。您使用的symfony版本是什么?@Valdas我在这个项目中不使用数据库,我使用API(另一个项目)获取用户数据我只希望这个角色是这个项目的本地角色。你是说每次操作都会重新加载我的用户数据吗/重定向后,您的角色将丢失。确保将其保存在数据库中。为什么要将角色添加到用户中,然后在令牌上调用getRoles()
?@xabbuh,因为他想查看角色是否正确设置为用户。您使用的symfony版本是什么?@Valdas我在这个项目中不使用数据库,我使用API(另一个项目)获取用户数据我只希望这个角色是这个项目的本地角色。你是说每次操作都会重新加载我的用户数据吗/我忘了说我已经在我的app/security.yml中添加了这个。无论如何,谢谢你的回答=)我忘了说我已经在我的app/security.yml中添加了这个。无论如何,谢谢你的回答=)