2014-08-31 93 views
1

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

$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'), 
); 

THX提前

回答

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引用者的功能。

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

什么预登录引荐? – Trix 2017-01-01 18:02:46