En la chamba se me presentó el requerimiento de que un usuario con cierto ROL debería ser redirigido a una ruta exclusiva para estos usuarios.
Con la ayuda del grupo de slack de PHPMX pude sacar este requerimiento. Esto es en Symfony 4.3.
En el guard authenticator: LoginFormAuthenticator, lo que hice fue inyectar el servicio security.authorization_checker
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
class LoginFormAuthenticator
{
protected $authorizationChecker;
public function __construct(AuthorizationCheckerInterface $authorizationChecker)
{
$this->authorizationChecker = $authorizationChecker;
}
// ...
}
Luego en el onAuthenticationSuccess
agregué mi lógica:
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
{
// Aquí redirigir
if ($this->authorizationChecker->isGranted('ROLE_CLIENT_MANAGER')) {
return new RedirectResponse(
$this->urlGenerator->generate('dashboard-authorized-change-result')
);
}
if ($targetPath = $this->getTargetPath($request->getSession(), $providerKey)) {
return new RedirectResponse($targetPath);
}
return new RedirectResponse($this->urlGenerator->generate('index'));
}
Por último en el controller donde definí mi ruta con route annotations le agregué el nombre de la ruta para que no me saliera un mensaje diciendo que la ruta no existe.
/**
* @Route("/dashboard-authorized-change-result", name="dashboard-authorized-change-result")
*/
Espero sea de ayuda.
Saludos.
Comentarios