Можно ли внедрить службу поставщика текущего брандмауэра в специальную службу? - PullRequest
0 голосов
/ 10 мая 2018

Я столкнулся с серьезным испытанием в одном из моих проектов.

Мне нужно внедрить поставщика услуг, определенного для брандмауэра, в службу стороннего пакета, который я разрабатываю. Я не могу определить это явно в моей службе , потому что я хочу добиться этого, когда служба вызывается из другого брандмауэра или пользователь меняет поставщика в security.yaml, моя служба адаптируется для использования правильного поставщика.

Что я смог сделать, так это получить только имя поставщика, введя RequestStack и FirewallMap и получив FirewallConfig с использованием текущего запроса, но не более того,просто имя.

Интересно, есть ли способ сделать это?Там нет ничего в документах по этому поводу.Но я уверен, что должен быть способ, поскольку слушатели аутентификации в Security Bundle делают то же самое.

Я читаю ваши умные ответы!:)

1 Ответ

0 голосов
/ 11 мая 2018

Вы пытались заглянуть в класс FirewallConfig?Он не очень хорошо документирован, но существует и доступен через $firewallMap->GetFirewallConfig($request).Вся информация о брандмауэре хранится в этом объекте, а также в провайдере ($firewallConfig->getProvider()).

Если вам удалось внедрить конфигурацию FirewallMap, я думаю, что вы также можете передать текущий Request объект в качестве параметра для получения FirewallConfig:

public class YourService()
{
    ...
    public function YourMethod(Request $request)
    {
        // Your FirewallMap injection
        ...

        $firewallConfig = $firewallMap->getFirewallConfig($request);

        // Proceed with $firewallConfig information
    }
}

Подробнее о FirewallConfig классе здесь .

...