2014-08-31 59 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