如何防止访问 Symfony 2 中的特定路由
Posted
技术标签:
【中文标题】如何防止访问 Symfony 2 中的特定路由【英文标题】:How to prevent access to specific routes in Symfony 2 【发布时间】:2014-12-31 03:04:43 【问题描述】:我是 symfony2 的新手,我不了解 security.yml 的工作方式
我的应用程序中有 2 个角色:ROLE_USER、ROLE_ADMIN。
ROLE_USER:只能查看(不能 CRUD) ROLE_ADMIN:可以做任何事情(可以 CRUD)
我有两个基本问题:
app/config 中是否只有 1 个 security.yml?我可以为我的包 ThePartner\EZFBundle\Resource\config 创建一个 security.yml,我可以在其中指定角色可以访问的路由吗?
我想阻止 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
谢谢大家
【问题讨论】:
【参考方案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 :)以上是关于如何防止访问 Symfony 2 中的特定路由的主要内容,如果未能解决你的问题,请参考以下文章