В настоящее время я создаю веб-приложение с помощью Silex и только начал внедрять SecurityServiceProvider
.
Я добавил следующий фрагмент в код начальной загрузки:
$app->register(new Silex\Provider\SecurityServiceProvider(), array(
'security.firewalls' => array(
'login' => array(
'pattern' => '^/login$',
'security' => false,
),
'secured' => array(
'pattern' => '^.*$',
'anonymous' => true,
'form' => array('login_path' => '/login', 'check_path' => '/login/check'),
'logout' => array('logout_path', '/logout'),
'users' => $app['custom.user_provider'],
'switch_user' => array('parameter' => '_switch_user', 'role' => 'ROLE_IMPERSONATE'),
),
),
'security.encoder.digest' => $app->share(function ($app) {
return new MySQLPasswordEncoder(false);
}),
));
$app['security.role_hierarchy'] = array(
'ROLE_ADMIN' => array('ROLE_STAFF', 'ROLE_BAN_MGR', 'ROLE_IMPERSONATE'),
'ROLE_STAFF' => array('ROLE_USER'),
);
$app['security.access_rules'] = array(
array('^/admin/bans/.*$', 'ROLE_BAN_MGR'),
array('^/admin/.*$', 'ROLE_STAFF'),
array('^/account/.*$', 'ROLE_USER'),
array('^.*$', ''),
);
Я хочу иметь возможность использовать контекст безопасности (т. е. is_granted(...)
в шаблонах) на любой странице, поэтому я использую 'pattern' => '^.*$', 'anonymous' => true
.
Чтобы соответствовать требованию, чтобы login_path
находился за пределами защищенной области, я добавил брандмауэр login
.
Теперь проблема в том, что контекст безопасности недоступен на странице /login
, поэтому is_granted(...)
выдает исключение:
AuthenticationCredentialsNotFoundException: контекст безопасности не содержит токена проверки подлинности. Одна из возможных причин может заключаться в том, что для этого URL-адреса не настроен брандмауэр.
Я пытался добавить 'security' => true, 'anonymous' => true
к брандмауэру login
, но это приводит к бесконечным перенаправлениям (поскольку /login
находится внутри защищенной зоны).
Вопрос. Как сделать контекст безопасности доступным на странице входа (которая по определению не может быть защищена)?
'security' => false
, так и для'security' => true
, но это не сработало. Ответ mpm преуспевает. - person Lukas   schedule 08.05.2013