techpaf/annotation-firewall-bundle

Symfony2 扩展包

dev-master / 0.1.x-dev 2013-12-04 01:57 UTC

This package is not auto-updated.

Last update: 2024-09-23 14:05:09 UTC


README

此扩展包允许您通过注释为您的 Symfony2 项目配置防火墙。它受到以下内容的启发:Matthias Noback 的博客NelmioApiDocBundleJMSSerializerBundle

knpbundles.com

安装

更新您的 composer.json 文件

{
    "require": {
        "techpaf/annotation-firewall-bundle": "0.1.*@dev"
    }
}

app/AppKernel.php 中注册扩展包

// app/AppKernel.php
public function registerBundles()
{
    return array(
        // ...
        new TechPaf\AnnotationFirewallBundle\TechPafAnnotationFirewallBundle(),
    );
}

使用方法

AnnotationFirewallBundle 使用注释来指示哪些路由应该受到保护。

Security.yml

在您的 security.yml 文件中,您需要注册由扩展包提供的请求匹配器,而不是使用类似 pattern: ^/api/ 的模式。

# app/config/security.yml
# ...
firewalls:
    any_firewall:
        #pattern: ^/api/    # No need of the pattern anymore
        request_matcher: techpaf.annotation_firewall.annotation_request_matcher

您可以使用它与多个防火墙一起使用。例如

firewalls:
    dev:          # default Firewall
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false

    fos_secured:  # FOSUserBundle Firewall
        pattern: ^/admin/
        # ...

    wsse_secured: # MopaWSSEAuthenticationBundle Firewall
        request_matcher: techpaf.annotation_firewall.annotation_request_matcher
        # ...

注释

然后您需要配置每个您想要使用此扩展包进行保护的控制器。

<?php

namespace TechPaf\ExampleBundle\Controller;

// ...
use TechPaf\AnnotationFirewallBundle\Annotation\FirewallExclude;
use TechPaf\AnnotationFirewallBundle\Annotation\FirewallExclusionPolicy;

/**
 * @FirewallExclusionPolicy("NONE")
 */
class MyController extends Controller
{
    /**
    * @Route("/secured")
    * @Template()
    **/
    public function securedAction()
    {
        return array('secured' => true);
    }

    /**
    * @Route("/not_secured")
    * @Template()
    *
    * @FirewallExclude
    **/
    public function notSecuredAction()
    {
        return array('secured' => false);
    }
}

有三个注释

  • @FirewallExclusionPolicy
  • @FirewallExclude
  • @FirewallExpose

@FirewallExclusionPolicy

此注释指定了控制器中每个路由的默认策略。它可以有两个值:ALLNONE

  • ALL 表示除非您添加 @FirewallExpose 注释,否则每个路由都将从防火墙中排除
  • NONE 表示除非您添加 @FirewallExclude 注释,否则每个路由都将添加到防火墙中

默认排除策略是 ALL,因此除非您添加注释,否则不会使用 AnnotationFirewallBundle 保护任何路由。

@FirewallExclude

此注释从防火墙中排除特定路由(路由不受保护)

@FirewallExpose

此注释将特定路由添加到防火墙中(路由受到保护)

待办事项

接下来的更新将包括

  • 允许多个防火墙同时使用 AnnotationFirewallBundle
  • 添加缓存