Regex: все, кроме [string] - PullRequest
       18

Regex: все, кроме [string]

0 голосов
/ 15 апреля 2019

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

Я сделал это, но это не работает, и я не знаю Regex:

pattern: ^/(?!/accueil).*$

Там я обязан поставить все свои ссылки, что дает:

pattern: ^/(admin|profile|package|securiteInformatique|logout)

Так было бы проще поставить "все, что угодно" / accueil

Мой security.yml:

   # app/config/security.yml
security:
    encoders:
        FOS\UserBundle\Model\UserInterface: bcrypt

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: ROLE_ADMIN

    providers:
        app:
           id: bes_auth.user_provider

    firewalls:

        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
           # anonymous:    true

       # public:
        #    pattern: ^accueil
         #   security: false
          #  anonymous: true

        main:
            logout_on_user_change: true
           # pattern: ^/(admin|profile|packages|securiteInformatique|logout)
            #pattern: ^/(?!accueil)

            form_login:
                check_path: fos_user_security_login_check
                login_path: /login_check

            guard:
                authenticators:
                    - app.security.login_form_authenticator
                    - bes_auth.authenticator

                entry_point: Site\PagesBundle\Security\LoginFormAuthenticator

            logout:
                path:   deconnexion #nom de la route de déconnexion
                target: /
                success_handler: bes_auth.authenticator
            anonymous:    true

    access_control:
        - { path: ^/admin, role: ROLE_SUPER_ADMIN }
        - { path: ^/accueil, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/, role: ROLE_USER }

1 Ответ

0 голосов
/ 16 апреля 2019

Вы должны полностью удалить брандмауэр public, удалить pattern с брандмауэра main и использовать access_control для обработки разрешений.

Следующая конфигурация читается Symfony сверхувниз, применяя первое найденное правило.Таким образом, любой URL-адрес, начинающийся с /accueil, будет проверен брандмауэром main, но позволит общественности просматривать его без входа в систему (поскольку у вас есть anonymous: true).Для каждого другого URL (который не начинается с /accueil) потребуется роль ROLE_USER, поэтому будет выполняться аутентификация.

    access_control:
        - { path: ^/admin, role: ROLE_SUPER_ADMIN }
        - { path: ^/accueil, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/, role: ROLE_USER }
...