Silex:登录后将admin重定向到admin-home路径

时间:2014-08-31 16:58:24

标签: php login silex

成功登录后,Silex如何将管理员(ROLE_ADMIN)重定向到/ admin页面,成功登录后将用户(ROLE_USER)重定向到/页面? 到目前为止我的配置:

$app['security.firewalls'] = array(
    'login' => array(
    'pattern' => '^/login$',
     ),
     'secured' => array(
        'pattern' => '^.*$',
        'form' => array('login_path' => '/login', 'check_path' => '/login_check'),
        'logout' => array('logout_path' => '/logout'),
        'users' => $app->share(function() use ($app) {
                 return new App\User\UserProvider($app['db']);
        }),
      ),
);
$app['security.access_rules'] = array(
array('^/admin', 'ROLE_ADMIN', 'http'),
    array('^.*$', 'ROLE_USER'),
);

提前谢谢

1 个答案:

答案 0 :(得分:3)

我认为有几种方法可以做到这一点 - 我建议为/login/redirect添加一个新的控制器,然后在登录后将人们送到那里。然后,控制器可以根据用户的角色执行用户发送位置的逻辑。

class LoginRedirect implements ControllerProviderInterface {

    public function connect(Application $app) {
        $controller = $app['controllers_factory'];
        $controller->get('/', array($this, 'index'))->bind('login-redirect');
        return $controller;
    }

    public function index(Application $app) {

        if ($app['security']->isGranted('ROLE_ADMIN')) {
            return $app->redirect($app['url_generator']->generate('admin-home'));
        }

        return $app->redirect($app['url_generator']->generate('non-admin-home'));
    }

}

为其添加路线:

$app->mount('/login/redirect', new Controller\LoginRedirect());

然后在您的安全防火墙设置中添加form部分中的选项以使用此路由作为默认目标路径 - 即所有用户在登录后重定向到的位置。请注意,使用此设置,您将失去用户重定向到HTTP referer的功能。

...
    'form' => array(
        'login_path' => '/login',
        'check_path' => '/login_check',
        'always_use_default_target_path' => true,
        'default_target_path' => '/login/redirect'
    ),
...