访问控制正则表达式symfony 2

时间:2013-05-03 11:30:36

标签: regex symfony access-control

我需要帮助来配置我的symfony网站的访问控制部分。 我希望每个人都可以访问:

/ : the homepage
/login : the login page
/login_check : the check login page for FOSUserBundle
/register : the register page of FOSUserBundle
/resetting/request : the resetting password page of FOSUserBundle

我希望用户对所有其他用户进行身份验证,例如:/ abc,/ xxx,/ yy / xx ......等

我把它放在security.yml中,但它不起作用,用户可以完全访问所有情况:

access_control:    
        - { path: /_wdt/.*, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: /_profiler/.*, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: /login, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: /login_check, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: /resetting/request, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: /register, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: /, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: /*, role: IS_AUTHENTICATED_FULLY }

有什么问题?

谢谢;)

2 个答案:

答案 0 :(得分:4)

奇怪的使用acls。 acl正则表达式要简单得多。 ^标记了网址的开头。 $标记匹配网址的结尾。如果不存在$,则在“正则表达式”匹配之后。完全没有星号。哦,应该保护login_check

access_control:
    - { path: ^/$, role: IS_AUTHENTICATED_ANONYMOUSLY }  
    - { path: ^/_wdt, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/_profiler, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, role: IS_AUTHENTICATED_FULLY }

答案 1 :(得分:1)

问题是你错过了最后一行的句号:

      - { path: /*, role: IS_AUTHENTICATED_FULLY }
              ^^^^^

/*表示零或多个斜杠(/)..。应为/.*以指示后跟斜杠的任何内容

正确的输入应该是:

      - { path: /.*, role: IS_AUTHENTICATED_FULLY }