Незащищенная зона> доступ к пользовательской информации - PullRequest
0 голосов
/ 03 июня 2019

Сегодня я должен работать в уже существующем приложении, основанном на 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 должно дать мне то, что мне нужно.

Спасибо

...