2015-08-27 28 views
5

Tôi không thể làm cho quy tắc tường lửa hoạt động chính xác. Tôi có một người dùng có vai trò là D-COMPLIANCEDIALOG và quy tắc tường lửa cấp quyền truy cập vào quy tắc đó: - { path: ^/ , roles: D-COMPLIANCEDIALOG }. Tôi vẫn nhận được một quyền truy cập bị từ chối (Truy cập bị từ chối, người dùng không phải là vô danh, cũng không nhớ-tôi.).Tường lửa Symfony2: Người dùng có vai trò phù hợp nhưng "Truy cập bị từ chối"

#security.yml 

security: 
    encoders: 
     Symfony\Component\Security\Core\User\User: plaintext 
    providers: 
     reddot: 
      id: reddot_user_provider 

    firewalls: 

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

     secured_area: 
      pattern: ^/ 
      anonymous: ~ 
      http_basic: ~ 
      simple_form: 
       authenticator: reddot_authenticator 
        check_path: login_check 
        login_path: login 

    access_control: 
     - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/ , roles: D-COMPLIANCEDIALOG } 

Dữ liệu người dùng từ symfony profiler:

Username admin 
Authenticated? yes 
Roles [D-COMPLIANCEDIALOG] 
Inherited Roles  { } 
Token class Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken 

gì tôi đã kiểm tra:

  • Bộ điều khiển không có cài đặt bảo mật riêng
  • Tên vai trò dường như không có một lỗi đánh máy
  • Đây thực sự là dòng cuối cùng trong quy tắc tường lửa, nếu tôi xóa nó, tôi có truy cập.
+0

Bạn có thể muốn thực hiện kiểm soát truy cập đăng nhập của bạn 'đường dẫn: ^/login $, vai trò : IS_AUTHENTICATED_ANONYMOUSLY' với '$' để đảm bảo tuyến đường login_check của bạn được bảo mật https://symfony.com/doc/master/bundles/FOSUserBundle/index.html#step-4-configure-your-application-s-security-yml –

Trả lời

7

Tên vai trò không chính xác. Vui lòng kiểm tra tài liệu Security - Roles

Tất cả các vai trò bạn chỉ định cho người dùng phải bắt đầu bằng tiền tố ROLE_. Nếu không, chúng sẽ không được xử lý bởi hệ thống bảo mật của Symfony theo cách thông thường (tức là trừ khi bạn đang làm một cái gì đó nâng cao, gán một vai trò như FOO cho người dùng và sau đó kiểm tra FOO như mô tả dưới đây sẽ không hoạt động).

Tôi đã gặp phải vấn đề tương tự khi nhập tên vai trò 'không chính xác' và bị nhầm lẫn bởi thông báo lỗi.

0

Mặc dù Symfony suggest tiền tố vai trò với ROLE_ .. Bạn vẫn có thể sử dụng vai trò tùy chỉnh của bạn thông qua Securing by an Expression như:

access_control: 
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/ , allow_if: "has_role('D-COMPLIANCEDIALOG')"} 
Các vấn đề liên quan