Make it possible to match the request based on HTTP methods in the firewall configuration

This commit is contained in:
Daniel Tschinder 2014-03-07 14:57:29 +01:00 committed by Fabien Potencier
parent f0c0c2c99d
commit a8e9ed5cf1
6 changed files with 10 additions and 2 deletions

View File

@ -201,6 +201,10 @@ class MainConfiguration implements ConfigurationInterface
$firewallNodeBuilder
->scalarNode('pattern')->end()
->scalarNode('host')->end()
->arrayNode('methods')
->beforeNormalization()->ifString()->then(function ($v) { return preg_split('/\s*,\s*/', $v); })->end()
->prototype('scalar')->end()
->end()
->booleanNode('security')->defaultTrue()->end()
->scalarNode('request_matcher')->end()
->scalarNode('access_denied_url')->end()

View File

@ -254,7 +254,8 @@ class SecurityExtension extends Extension
} elseif (isset($firewall['pattern']) || isset($firewall['host'])) {
$pattern = isset($firewall['pattern']) ? $firewall['pattern'] : null;
$host = isset($firewall['host']) ? $firewall['host'] : null;
$matcher = $this->createRequestMatcher($container, $pattern, $host);
$methods = isset($firewall['methods']) ? $firewall['methods'] : array();
$matcher = $this->createRequestMatcher($container, $pattern, $host, $methods);
}
// Security disabled?

View File

@ -117,6 +117,7 @@ abstract class CompleteConfigurationTest extends \PHPUnit_Framework_TestCase
array(
'/test',
'foo\\.example\\.org',
array('GET', 'POST'),
),
), $matchers);
}

View File

@ -74,6 +74,7 @@ $container->loadFromExtension('security', array(
'host' => array(
'pattern' => '/test',
'host' => 'foo\\.example\\.org',
'methods' => array('GET', 'POST'),
'anonymous' => true,
'http_basic' => true,
),

View File

@ -57,7 +57,7 @@
<logout />
</firewall>
<firewall name="host" pattern="/test" host="foo\.example\.org">
<firewall name="host" pattern="/test" host="foo\.example\.org" methods="GET,POST">
<anonymous />
<http-basic />
</firewall>

View File

@ -56,6 +56,7 @@ security:
host:
pattern: /test
host: foo\.example\.org
methods: [GET,POST]
anonymous: true
http_basic: true