1

我在我的项目中使用 ZfcUser 和 BjyAuthorize。如果用户登录,他将被重定向到我的默认路由。

但我想改变它,所以如果角色 A 的用户将重定向到页面 A,而角色 B 的用户将重定向到页面 B。

任何想法,如何实现这一点?

4

4 回答 4

1

由于我必须根据角色检查几件事,因此我创建了一个简单的模块,而不是在用户登录后(登录后的默认路由)并根据角色(可通过 bjyautorize 获得)将应用程序重定向到正确的 url。

也许这不是一种优雅的方式,但您不必修改 zfcUser 代码。

于 2013-07-31T09:23:42.667 回答
1

我实际上已经这样做了,并在 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';
}
于 2013-07-10T00:40:49.037 回答
1

您可以在登录配置文件后设置重定向。

'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');
}
于 2015-05-14T09:48:42.583 回答
0

假设您在 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');
        }
    }
于 2013-08-28T05:13:57.167 回答