Symfony 4: не может получить доступ к ролям администратора.Доступ закрыт - PullRequest
0 голосов
/ 05 июня 2018

Я изучаю Symfony 4 и стараюсь следовать документации Symfony 4 для создания приложения.

Я следую этой статье , чтобы создавать роли администратора.

Но когда я получаю доступ к пути /admin, это всегда "Access Denied."

Я читаюМногие статьи на странице документации Symfony и StackOverflow, но не могут найти способ ее решить.Вот мой параметр

//config/packges/security.yaml

security:

    encoders:
        App\Entity\User:
            algorithm: bcrypt
    providers:
        our_db_provider:
            entity:
                class: App\Entity\User
        in_memory:
            memory:
                users:
                    admin:
                        password: admin123
                        roles: 'ROLE_ADMIN'
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            pattern:    ^/
            http_basic: ~
            provider: our_db_provider
            form_login:
              login_path: login
              check_path: login
              default_target_path: index
              always_use_default_target_path: true

            logout:
              path:   /logout
              target: /index

    access_control:
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin, roles: ROLE_ADMIN }

А вот журнал отладки Symfony:

Uncaught PHP Exception Symfony \ Component \ Security \ Core \ Exception \ AccessDeniedException: «Доступ запрещен».в C: \ xampp \ htdocs \ aimer-mvc \ vendor \ symfony \ security \ Http \ Firewall \ AccessListener.php line 68

Пожалуйста, помогите мне.Большое вам спасибо!

1 Ответ

0 голосов
/ 06 июня 2018

Если вы хотите протестировать свое приложение с admin / admin123 , вы должны разрешить in_memory провайдера в своем брандмауэре:

только для http_basic:

security:

    encoders:
        App\Entity\User:
            algorithm: bcrypt
    providers:
        our_db_provider:
            entity:
                class: App\Entity\User
        in_memory:
            memory:
                users:
                    admin:
                        password: admin123
                        roles: 'ROLE_ADMIN'
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            pattern:    ^/
            http_basic:
                provider: in_memory
            provider: our_db_provider
            form_login:
              login_path: login
              check_path: login
              default_target_path: index
              always_use_default_target_path: true

            logout:
              path:   /logout
              target: /index

    access_control:
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin, roles: ROLE_ADMIN }

также для form_login:

security:

    encoders:
        App\Entity\User:
            algorithm: bcrypt
    providers:
        both_providers:
            chain:
                providers: [in_memory, our_db_provider]
        our_db_provider:
            entity:
                class: App\Entity\User
        in_memory:
            memory:
                users:
                    admin:
                        password: admin123
                        roles: 'ROLE_ADMIN'
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            pattern:    ^/
            http_basic: ~
            provider: both_providers
            form_login:
              login_path: login
              check_path: login
              default_target_path: index
              always_use_default_target_path: true

            logout:
              path:   /logout
              target: /index

    access_control:
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin, roles: ROLE_ADMIN }

См. https://symfony.com/doc/current/security/multiple_user_providers.html для примеров ...

...