我目前正在开发一个具有Admin和不同单位登录的库存系统,我需要做的是登录以根据他们的角色重定向用户
我已经通读了文档,发现了大量的信息,但我所做的都没有效果。
我知道要点是在onAuthenticationSuccess中放置一个IF,并检查角色并相应地重定向它们,问题是我不知道如何在登录后检索角色。
我已经尝试检查isgrant, getRoles和自定义APi在Symfony文档中的建议。
抱歉,如果帖子没有格式,但我是全新的stackoverflow和相当新的PHP编码。
您可以更改登录的默认目标路径,请参见安全文档中的更改默认页面。
这将引导所有用户在登录后进入同一页面。在此页面上,您可以执行角色检查并根据角色显示不同的内容或再次重定向。这可能不是完美的-例如,如果您不小心,您可能会在浏览器中获得太多的重定向-但这可能是解决问题的最快和最简单的方法,因为您可以使用控制器中您可能更习惯的helper方法。
如果您想要在用户登录时决定将用户重定向到哪里,则需要自定义Authenticator。请参阅如何构建登录表单中的步骤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'));
}
请注意,当您使用分层角色时,我在这里做的角色检查可能不起作用,请参阅:分层角色。