Настройка безопасности для каждой папки sr c в Symfony - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь настроить безопасность для папки в src / in Symfony. Но я хочу иметь другой набор правил безопасности для основной папки «Общие» и «Intr anet» без префикса маршрутов ... Так что мне нужно только префикс «Extr anet»

Возможно ли это? Я знаю, что с префиксом в routing.yml это очень легко сделать, но это не вариант, поскольку видимые URL-адреса внезапно изменятся

Проблема возникает, когда мы должны разрешить внешним пользователям нашу платформу. В течение многих лет он был доступен только для сотрудников компаний, но теперь внешние люди должны иметь доступ к определенным страницам. И некоторые общие маршруты (ajax звонки и c) должны быть доступны для всех

  • src /
    • Интранет / => Открытые маршруты для внутренних пользователей
      • SomeBundle
      • ...
    • Общие / => Открытые маршруты для всех пользователей
      • AnotherBundle
      • ...
    • Extranet / => Открытые маршруты для внешних пользователей
      • TheBestBundle
      • ...

Тогда маршруты Extr anet получают дополнительный префикс / extranet /. Но я хотел бы иметь другие 2 (General и Intr anet) без префикса

# routing.yml
extranet:
    resource: "@ExtranetBundle/Controller/"
    prefix:   /extranet/

Затем с контролем доступа я позабочусь о маршрутах / extr anet

access_control:
    # Login and the base_route "/" is always available
    - { path: ^/$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }

    # External users + Super admins + server IP's can only access urls starting with /extranet/
    - 
        path: ^/extranet/*
        roles: [ROLE_EXTERNAL_USER, ROLE_SUPER_ADMIN]
        ips: !php/const:SomeBundle\SomeClass\ConstantProvider::ALLOWED_SERVER_IPS

    # Some routes need to be available for both internal and external users
    # but hopefully without having to prefix them

    ...

    # All other routes are only for internal users and the right ip addresses
    - 
        path: ^/*
        role: ROLE_INTERNAL_USER
        ips: !php/const:SomeBundle\SomeClass\ConstantProvider::ALLOWED_SERVER_IPS

Или, может быть, идея по-другому подойти к этой проблеме?

1 Ответ

0 голосов
/ 24 января 2020

Я думаю, что лучшим подходом является использование внешнего пользователя избирателя, который должен иметь уникальную РОЛЬ (EXTERNAL_ROLE), тогда вы можете использовать избирателя для отсеивания ресурсов, которые вы хотите защитить https://symfony.com/doc/current/security/voters.html, таким образом, вы можете защитить ресурс, основанный на логике c, а не на папке

...