如何在Symfony 2中覆盖FOSUserBundle自动授权


How can I override FOSUserBundle autorization in Symfony 2

我正在使用FOSUserBundle,我正在寻找添加一些自动化逻辑的最佳方法。

我想保护的路线总是以相同的模式开始:

/admin/{id}/

ID指的是一个实体"Site"。User类与此实体具有ManyToOne关系。

因此,我想每次都检查调用的路由是否与存储在我的用户实例中的"Site"相对应。我查看了文档以找到最佳方法:创建不同的角色,使用ACL,在每个控件中手动检查。。。我不想检查每个调用的函数,但我找不到更简单的方法,所以我正在寻求帮助。

您需要将路由授权访问配置到app/config/security.yml文件中

像这样:

access_control:
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/*, role: ROLE_ADMIN }

我终于找到了另一个解决方案。我不确定这是否是最好的方法,但它有效。

我的所有控制器都使用函数__call扩展了一个抽象控制器,该函数检查会话用户的网站是否与参数转换器传递的网站相对应。我把我所有的控制器方法vibility都改为"protected",这似乎很好。