appsco / assertion-voter-bundle
Assertion Voter Bundle
Installs: 110
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 4
Forks: 1
Type:symfony-bundle
Requires
- php: >=5.4
- appsco/component-assertion-voter: 1.0.0-RC1
- symfony/dependency-injection: ~2.1
This package is not auto-updated.
Last update: 2024-11-19 07:53:00 UTC
README
Usage
Register bundle in kernel
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = array(
// ...
new Appsco\AssertionVoterBundle\AppscoAssertionVoterBundle(),
);
// ...
}
}
Configure
# app/config/config.yml
appsco_assertion_voter:
voter_record_provider: appsco.assertion.voter_record_provider.orm # Default Doctrine ORM voter record provider
voter_factory: appsco.assertion.voter_factory.simple
Use
// Controller
public function fooAction()
{
// Fetch assertion information from your service
$info = $this->get('your_info_provider')->getInfo();
// Resolve roles
$roles = $this->get('appsco.assertion.role_resolver')->resolve($info);
}
Persistence layer integration
Bundle can be integrated with any persistence layer by implementing your own VoterRecordProviderInterface
or by using
one already provided in the bundle.
Doctrine Orm Voter Record Provider
-
(required) Create your VoterRecord entity
In most cases it will look like this:
<?php namespace Acme\YourBundle\Entity; use Appsco\AssertionVoterBundle\Entity\VoterRecord as BaseVoterRecord; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity */ class VoterRecord extends BaseVoterRecord { /** * @ORM\Id * @ORM\GeneratedValue * @ORM\Column(type="integer") * @var int */ private $id; /** * @return int */ public function getId() { return $this->id; } }
-
(required) Instruct bundle to use it
Set
voter_record_provider
inapp/config/config.yml
toappsco.assertion.voter_record_provider.orm
Set
voter_record_class
inapp/config/config.yml
to your voter record class name.Example:
# app/config/config.yml appsco_assertion_voter: voter_record_provider: appsco.assertion.voter_record_provider.orm voter_record_class: Acme\YourBundle\Entity\VoterRecord
Doctrine Dbal Voter Record Provider
-
(required) Instruct bundle to use it
Set
voter_record_provider
inapp/config/config.yml
toappsco.assertion.voter_record_provider.dbal
Example:
# app/config/config.yml appsco_assertion_voter: voter_record_provider: appsco.assertion.voter_record_provider.dbal
-
(optional) Customize table name and fields
By default it will try to fetch voter records from
VoterRecord
table and read the following columns: issuer, attribute, value, roleYou can customize each of these settings by setting container parameters:
Table name : appsco.assertion.voter_record_provider.dbal.table_name Issuer column : appsco.assertion.voter_record_provider.dbal.issuer_column Attribute column: appsco.assertion.voter_record_provider.dbal.attribute_column Value column : appsco.assertion.voter_record_provider.dbal.value_column Role column : appsco.assertion.voter_record_provider.dbal.role_column: role
Using custom Voter Record Provider
If you're using other persistence layer you can easily integrate bundle with it.
-
(required) Create provider service
Create your own service which implements
Appsco\AssertionVoterBundle\VoterRecordProvider\VoterRecordProviderInterface
and register it within container. -
(required) Instruct bundle to use it
Set
voter_record_provider
inapp/config/config.yml
toyour.assertion_voter.record_provider.service_key
Decision Makers
Sometimes, you might want to do more complex decision making, eg. disable editing roles if user has no ROLE_ENABLED etc. To do this you need more than just a set of simple vote records.
You need to implement your own decision maker.
Make a service which implements BWC\Component\AssertionVoter\DecisionMakerInterface
and tag it:
my.custom.assertion.decision_maker:
class: My\Custom\DecisionMakerServiceClass
tags:
- { name: appsco.assertion.decision_maker, alias: my_decision_maker }
And now you can run assertions against it:
public function fooAction()
{
// Fetch assertion information from your service
$info = $this->get('your_info_provider')->getInfo();
// Resolve roles
$roles = $this->get('appsco.assertion.role_resolver')->resolve($info, 'my_decision_maker');
}
Note second parameter in RoleResolver::resolve method. It must match alias from
appsco.assertion.decision_maker
class.