Как в 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'), );
Thx заранее
Я думаю, что есть несколько способов сделать это – я бы рекомендовал добавить новый контроллер для /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' ), ...