Symfony стратегия управления принятием решений всегда положительна - PullRequest
1 голос
/ 30 апреля 2020

Я пытаюсь изменить стратегию принятия решения об управлении доступом в Symfony проекте, но, похоже, он не работает.

В моем security.yaml есть следующее:

security:
    access_decision_manager:
        strategy: unanimous
        allow_if_all_abstain: false

    access_control:
        - { path: ^/dev/test, roles: [COMPLEX_TEST, ROLE_OTHER] }

Мне нужно, чтобы и COMPLEX_TEST, и ROLE_OTHER были предоставлены для того, чтобы маршрут был доступен (COMPLEX_TEST проверяется избирателем с пользовательской ролью).

Но когда я пытаюсь получить доступ к маршруту, только вызывается голосующий COMPLEXT_TEST, и это потому, что он разрешает доступ, а стратегия все еще affirmative.

Я могу сказать это, потому что при отладке кода я вижу, что значение в Symfony\Component\Security\Core\Authorization\AccessDecisionManager равно всегда affirmative, независимо от того, что я установил в security.yaml.

На данный момент я создал проход компилятора, который вынуждает стратегию unanimous, но это взлома:

class FixAccessDecisionManagerPass implements CompilerPassInterface
{
    public function process(ContainerBuilder $container)
    {
        if ($container->hasDefinition('security.access.decision_manager')) {
            $definition = $container->getDefinition('security.access.decision_manager');
            $definition->setArgument('$strategy', AccessDecisionManager::STRATEGY_UNANIMOUS);
        }
    }
}

С проходом компилятора я вижу, что значение в Symfony\Component\Security\Core\Authorization\AccessDecisionManager правильно установлено на unanimous и контроль доступа работает как положено.

видите, чего мне не хватает? Или это ошибка в Symfony? Моя Symfony версия 4.4.7.

Спасибо за ваше время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...