【问题标题】:How to prevent access to specific routes in Symfony 2如何防止访问 Symfony 2 中的特定路由
【发布时间】:2014-12-31 03:04:43
【问题描述】:

我是 symfony2 的新手,我不了解 security.yml 的工作方式

我的应用程序中有 2 个角色:ROLE_USER、ROLE_ADMIN。

ROLE_USER:只能查看(不能 CRUD)
ROLE_ADMIN:可以做任何事情(可以 CRUD)

我有两个基本问题:

  1. app/config 中是否只有 1 个 security.yml?我可以为我的包 ThePartner\EZFBundle\Resource\config 创建一个 security.yml,我可以在其中指定角色可以访问的路由吗?

  2. 我想阻止 ROLE_USER 访问路由 blue_form_new、blue_form_create、blue_form_edit、blue_form_update、blue_form_delete?此 ROLE_USER 只能访问 blue_form、blue_form_show

这是我的 ThePartner\EZFBundle\Resources\routing.yml

ThePartnerEZFBundle_blue_form:
    resource: "@ThePartnerEZFBundle/Resources/config/routing/blueform.yml"
    prefix:   /blue_form

这里是 ThePartnerEZFBundle/Resources/config/routing/blueform.yml

blue_form:
    pattern:  /
    defaults: { _controller: "ThePartnerEZFBundle:BlueForm:index" }

blue_form_show:
    pattern:  /{id}/show
    defaults: { _controller: "ThePartnerEZFBundle:BlueForm:show" }

blue_form_new:
    pattern:  /new
    defaults: { _controller: "ThePartnerEZFBundle:BlueForm:new" }

blue_form_create:
    pattern:  /create
    defaults: { _controller: "ThePartnerEZFBundle:BlueForm:create" }
    requirements: { _method: post }

blue_form_edit:
    pattern:  /{id}/edit
    defaults: { _controller: "ThePartnerEZFBundle:BlueForm:edit" }

blue_form_update:
    pattern:  /{id}/update
    defaults: { _controller: "ThePartnerEZFBundle:BlueForm:update" }
    requirements: { _method: post|put }

blue_form_delete:
    pattern:  /{id}/delete
    defaults: { _controller: "ThePartnerEZFBundle:BlueForm:delete" }
    requirements: { _method: post|delete }

谢谢大家

【问题讨论】:

    标签: security symfony routes yaml


    【解决方案1】:

    您只需要配置您的security.yml。您可以定义多个适用于不同路由的防火墙:

    security:
        firewalls:
            your_first_firewall:
                pattern: /public/ #this is regexp, so all urls starting with /public/ will   match
                security: false #this will be public, no firewall
            your_second_firewall:
                pattern: /nonPublic/
                security: true
    

    请记住,您的防火墙条目的顺序很重要 - 第一个匹配的模式将“获胜”。

    您还可以从捆绑包中导入安全设置。为此,您需要在主 config.yml 中导入捆绑包的 security.yml 文件 - 描述为 here)

    # app/config/config.yml
    imports:
        - { resource: '@AcmeDemoBundle/Resources/config/security.yml' }
    

    【讨论】:

    • 谢谢托马斯!我按照链接导入一个空的 security.yml。但是有一个错误提示无法从“/Users/anhnch/Documents/working/easyform/src/app/config/config.yml”导入资源“@ThePartnerEZFBundle/Resources/config/security.xml”。确保“ThePartnerEZFBundle”包已正确注册并加载到应用程序内核类中。虽然我确实在 AppKernel 中正确注册了包(它是由命令行生成的)
    • 是因为导入是在bundle注册之前发生的吗?
    • 不,这里与订单无关。您确定该文件存在(带有 xml 扩展名)吗?要么文件不存在,要么包未正确加载(或名称不合适) - 没有其他选项
    • 我的错,我错误地导入了security.xml而不是security.yml。非常感谢 Tomasz :)
    猜你喜欢
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多