This bundle provides the way to define definition of simple security voters for symfony
$ php composer.phar require hshh/security-voter-generator-bundle:dev-master
<?php
// app/AppKernel.php
public function registerBundles()
{
$bundles = array(
// ...
new \Hshn\ClassMatcherBundle\HshnClassMatcherBundle(),
new \Hshn\SecurityVoterGeneratorBundle\HshnSecurityVoterGeneratorBundle(),
);
}
# app/config/config.yml
hshn_class_matcher:
matchers:
post: { equals: AcmeBundle\Entity\Post }
hshn_security_voter_generator:
voters:
voter_1:
attributes: [OWNER]
class_matcher: post
expression: 'user === object.getUser()'
voter_2:
attributes: [OWNER]
class_matcher: post
property_path:
token: user
object: user # It means '$token.getUser() === $object.getUser()'
<?php
// controller/FooController.php
/**
* without any extra bundles
*/
public function bar1Action(AcmeBundle\Entity\Post $post)
{
// symfony 2.5
if (!$this->get('security.context')->isGranted('OWNER', $post)) {
throw $this->createNotFoundException();
}
// symfony 2.6+
if (!$this->get('security.authorization_checker')->isGranted('OWNER', $post)) {
throw $this->createNotFoundException();
}
}
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
/**
* with SensioFrameworkExtraBundle
*
* @Security("is_granted('OWNER', post)")
*/
public function bar2Action(AcmeBundle\Entity\Post $post)
{
}
use JMS\SecurityExtraBundle\Annotation\SecureParam;
/**
* with JMSSecurityExtraBundle
*
* @SecureParam(name="post", permissions="OWNER")
*/
public function bar3Action(AcmeBundle\Entity\Post $post)
{
}