Сегодня я должен работать в уже существующем приложении, основанном на Silex, и у меня есть некоторые проблемы с безопасностью.
В приложении некоторые области не защищены, некоторые области защищены.
В какой-то незащищенной области мне нужно иметь доступ к пользователю, конечно, если он подключен.
Цель проста: в незащищенной области мне нужно добавить некоторые функции для зарегистрированных пользователей.
Я прочитал документацию Silex, касающуюся безопасности, и нашел это: https://silex.symfony.com/doc/2.0/providers/security.html#allowing-anonymous-users
На stackoverflow я также нахожу некоторые сообщения, касающиеся той же проблемы:
Silex - доступ пользователя за пределами защищенной области ИЛИ Silex / Symfony Security Firewall Доступ токена пользователя за пределами защищенной области , но это не помогает мне выяснить, почему он не работает.
Итак, вот моя конфигурация брандмауэра:
$app['security.firewalls'] = array(
'default' => array(
'pattern' => '^/$',
'anonymous' => true,
),
'login' => array(
'pattern' => '^/(login$|_profiler)',
'anonymous' => true,
),
'secured' => array(
'pattern' => '^/personnalProgram/.*$',
'form' => array(
'login_path' => '/login',
'check_path' => '/personnalProgram/login_check',
),
'logout' => array(
'logout_path' => '/logout',
'invalidate_session' => true
),
'remember_me' => array(
'key' => getenv("remember_me.key"),
'secret' => getenv("remember_me.key"),
'always_remember_me' => true,
),
'guard' => array(
'authenticators' => array(
'app.login_authenticator'
)
),
'users' => function () use ($app) {
return new \App\Repository\UserRepository($app['db']);
},
'anonymous' => false,
),
);
Вы можете видеть, единственная защищенная область - "/ personnalProgram"
У меня также есть «базовый контроллер», все остальные расширяют его.
Здесь:
abstract class BaseController {
/** @var Application */
protected $app;
/** @var array */
protected $parameters = [];
/**
* @return mixed
*/
abstract protected function getTemplateName();
/**
* @return mixed
*/
abstract protected function getRepositoryName();
/**
* BaseController constructor.
*
* @param Application $app
*/
public function __construct(Application $app)
{
$this->app = $app;
/** @var array $menu */
$menu = $this->getAllRoutes();
$this->parameters['menu'] = $menu;
}
/**
* @return \Activo\App\Entity\User
* @throws \Exception
*/
protected function getUser()
{
$token = $this->app['security.token_storage']->getToken();
if ($token === null || ($user = $token->getUser()) === null) {
throw new \Exception("Could not get user");
}
return $user;
}
Поэтому я, естественно, подумал, что могу получить доступ к пользователю на всех контроллерах, и сделал некоторую проверку, но ... Нет.
Мне было интересно, не кажется ли вам что-то странным в моей конфигурации брандмауэра, потому что, если я обращаюсь к документации Silex, добавление анонимного> true должно дать мне то, что мне нужно.
Спасибо