【问题标题】:Symfony access control for site root站点根目录的 Symfony 访问控制
【发布时间】:2014-01-28 00:33:33
【问题描述】:

我创建了一个带有防火墙访问控制的网站,强制用户登录以访问任何内容,即

 - { path: ^/, roles: IS_AUTHENTICATED_FULLY}

现在客户希望在网站的根目录(即 www.sitename.com)有一个启动页面。

我已将此页面映射到 DefaultController::indexAction,但是我无法弄清楚如何允许 IS_AUTHENTICATED_ANONYMOUSLY 访问此页面,因为没有路径名,即 www.sitename.com/splash-page 来挂起访问控制。

我什至可以这样做吗?

【问题讨论】:

  • 您的网站是否在路径中使用文件夹?您可以保护您网站除主页以外的所有部分:symfony.com/doc/current/book/security.html#authorization
  • 感谢您的及时回复。我不确定您所说的文件夹是什么意思 - 如果您的意思是模仿目录结构或具有某种形式的层次结构的 url,即 blog/individual-piece-of-content,那么没有。
  • 是的,很抱歉,folders 用词不当。无论如何,我认为您仍然可以通过添加页面名称来保护页面,例如。 - { path: ^/mypage, roles: IS_AUTHENTICATED_FULLY }。对除主页之外的每个页面都执行此操作。即使没有文件夹,它也应该可以工作。
  • 并且不要忘记在您的登录页面中删除限制,否则用户将无法访问此页面以登录。
  • 谢谢 - 认为这可能是我必须做的 - 但希望有一种比逐页阅读更快的方法。

标签: php symfony firewall access-control


【解决方案1】:

您可以保护除主页 URL 之外的所有 URL:

# app/config/security.yml file
security:
    ...
    access_control:
        # Logged in
        - { path: ^/(.+), roles: IS_AUTHENTICATED_FULLY }
        # no authentication for the homepage:
        - { path: ^/$, roles: IS_AUTHENTICATED_ANONYMOUSLY }

正则表达式 ^/(.+) 将匹配每个 URL,而不是包含 / 之后的内容。

正则表达式 ^/$ 将匹配 URL,而不是在 / 之后不包含任何内容(/ 是字符串的结尾)。

主页 URL 必须在 routing.yml 文件中声明:

homepage:
    pattern: /
    defaults: { _controller: ACMEBundle:Default:homepage }

【讨论】:

  • 嗨@nmcilree 如果这个答案已经解决了你的问题,请点击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-04
  • 1970-01-01
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多