如何从Symfony路由模式正则表达式中排除特定链接?

时间:2018-09-28 13:02:41

标签: regex symfony

我的app/config/security.yml中有此参数

parameters:
    sylius.security.api_regex: "^/api"

这与/api/v1/a//api/custom/b/等所有链接相匹配...

我想说特定的路线:/api/custom/some/info/从比赛中删除。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

您的^/api(?!/api/custom/some/info/)正则表达式与字符串开头的/api匹配,然后如果匹配后跟/api/custom/some/info/,则匹配失败。

您可以使用

对其进行修复
^/api(?!/custom/some/info/)

请参见regex demo

详细信息

  • ^-字符串的开头
  • /api-文字子字符串...
  • (?!/custom/some/info/)-不立即跟随/custom/some/info/

现在,如果最后一个斜杠是可选的,则可以在字符串末尾使用替代斜杠:

^/api(?!/custom/some/info(?:/|$))
                         ^^^^^^^ 

答案 1 :(得分:1)

如果您在symfony中启用了防火墙,则只需设置访问控制,将此路径放在列表的顶部,并在其中允许一个角色,只有您一个。

app / config / security.yml

access_control:
    #If route is matched matched, will block access to anyone not having ROLE_PRIVATE
    - { path: ^/api/custom/some/info/, roles: [ROLE_PRIVATE] }
    #Else if route is not matched, will allow access to everyone
    - { path: ^/api, roles: [IS_AUTHENTICATED_ANONYMOUSLY] }