我目前正在开发一个库存系统,需要登录管理员和不同的单位,我需要做的是登录以根据用户的角色重定向用户
我已经阅读了文档并发现了大量信息,但我所做的一切都不起作用。
我知道要点是在 onAuthenticationSuccess 中放置一个 IF ,然后检查角色并相应地重定向它们,问题是我不知道如何在登录后检索角色。
我尝试检查 Symfony 文档上的 isGranted、getRoles 和 Custom APi 建议。
抱歉,如果帖子没有格式,但我对 stackoverflow 很陌生,而且对 PHP 编码也很陌生。
您可以更改登录的默认目标路径,请参阅安全文档中的更改默认页面。
这将引导所有用户在登录后进入同一页面。在此页面上,您可以执行角色检查并显示不同的内容或根据其角色再次重定向。这可能并不完美 - 例如,如果您不小心,您可能会在浏览器中收到太多重定向 - 但这可能是解决您的问题的最快和最简单的方法,因为您可以使用控制器中的帮助器方法你可能更习惯了。
如果您想在用户登录时决定将其重定向到何处,则需要一个自定义身份验证器。请参阅如何构建登录表单中的步骤 3以了解身份验证器的一般外观。然后你将不得不改变onAuthenticationSuccess,例如这样的:
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
{
// the $token holds the user object. You might have stumbled upon this in the context of the service `security.token_storage`
$user = $token->getUser();
if (in_array('ROLE_ADMIN', $user->getRoles(), true)) {
return new RedirectResponse($this->urlGenerator->generate('app_admin_dashboard'));
}
return new RedirectResponse($this->urlGenerator->generate('default_route'));
}
Run Code Online (Sandbox Code Playgroud)
请注意,当您使用分层角色时,我在那里进行的角色检查可能不起作用,请参阅:分层角色。
| 归档时间: |
|
| 查看次数: |
2815 次 |
| 最近记录: |