我在我的项目中使用 ZfcUser 和 BjyAuthorize。如果用户登录,他将被重定向到我的默认路由。
但我想改变它,所以如果角色 A 的用户将重定向到页面 A,而角色 B 的用户将重定向到页面 B。
任何想法,如何实现这一点?
我在我的项目中使用 ZfcUser 和 BjyAuthorize。如果用户登录,他将被重定向到我的默认路由。
但我想改变它,所以如果角色 A 的用户将重定向到页面 A,而角色 B 的用户将重定向到页面 B。
任何想法,如何实现这一点?
由于我必须根据角色检查几件事,因此我创建了一个简单的模块,而不是在用户登录后(登录后的默认路由)并根据角色(可通过 bjyautorize 获得)将应用程序重定向到正确的 url。
也许这不是一种优雅的方式,但您不必修改 zfcUser 代码。
我实际上已经这样做了,并在 GitHub 中创建了合并请求。这实际上是一个非常小的更改,需要在 zfc-user/src/ZfcUser/Controlelr/UserController.php 中完成。在 authenticateAction() 你需要替换这个:
return $this->redirect()->toRoute($this->getOptions()->getLoginRedirectRoute());
为了这:
$route = $this->getOptions()->getLoginRedirectRoute();
if(is_callable($route)) {
$route = $route($this->zfcUserAuthentication()->getIdentity());
}
return $this->redirect()->toRoute($route);
在您的 config/autoload/module.zfcuser.global.php 文件中,您将能够对 login_redirect_route 使用回调:
'login_redirect_route' => function(\ZfcUser\Entity\UserInterface $user) {
if($user->getUsername()=='Admin') {
return 'admin';
}
return 'user';
}
您可以在登录配置文件后设置重定向。
'login_redirect_route' => '/your-url',
your-url
可从所有类型的用户访问,然后创建 switch case 以匹配您的角色并将页面重定向到角色特定页面。
$roles = $this->serviceLocator->get('BjyAuthorize\Provider\Identity\ProviderInterface')->getIdentityRoles();
switch ($roles){
case "admin":
$this->redirect()->toRoute('user_admin');
case "user":
$this->redirect()->toUri('user.html');
}
假设您在 bjyauthorize 中有一个“管理员”角色,您想重定向到另一个路由。
在您的 loginAction 中替换代码:
if ($this->zfcUserAuthentication()->getAuthService()->hasIdentity()) {
return $this->redirect()->toRoute($this->getOptions()->getLoginRedirectRoute());
}
使用此代码:
if ($this->zfcUserAuthentication()->getAuthService()->hasIdentity()) {
$roles = $this->serviceLocator->get('BjyAuthorize\Provider\Identity\ProviderInterface')->getIdentityRoles();
if (in_array('admin',$roles))
{
return $this->redirect()->toRoute('admin_route');
} else {
return $this->redirect()->toRoute('user_route');
}
}