appsco / assertion-voter-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-09-24 07:01:44 UTC
README
用法
在内核中注册包
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = array(
// ...
new Appsco\AssertionVoterBundle\AppscoAssertionVoterBundle(),
);
// ...
}
}
配置
# 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
使用
// 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);
}
持久层集成
该包可以通过实现自己的 VoterRecordProviderInterface
或使用包中已提供的任何持久层进行集成。
Doctrine Orm 投票记录提供者
-
(必需)创建投票记录实体
通常看起来像这样
<?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; } }
-
(必需)指导包使用它
在
app/config/config.yml
中设置voter_record_provider
为appsco.assertion.voter_record_provider.orm
在
app/config/config.yml
中设置voter_record_class
为您的投票记录类名称。示例
# 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 投票记录提供者
-
(必需)指导包使用它
在
app/config/config.yml
中设置voter_record_provider
为appsco.assertion.voter_record_provider.dbal
示例
# app/config/config.yml appsco_assertion_voter: voter_record_provider: appsco.assertion.voter_record_provider.dbal
-
(可选)自定义表名和字段
默认情况下,它将尝试从
VoterRecord
表中获取投票记录并读取以下列:发行者、属性、值、角色您可以通过设置容器参数自定义这些设置中的每一个
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
使用自定义投票记录提供者
如果您使用其他持久层,可以轻松地将包与其集成。
-
(必需)创建提供者服务
创建自己的服务,该服务实现
Appsco\AssertionVoterBundle\VoterRecordProvider\VoterRecordProviderInterface
并将其在容器中注册。 -
(必需)指导包使用它
在
app/config/config.yml
中设置voter_record_provider
为your.assertion_voter.record_provider.service_key
决策者
有时,您可能需要进行更复杂的决策,例如,如果用户没有 ROLE_ENABLED 等,则禁用编辑角色。为此,您需要不仅仅是一组简单的投票记录。
您需要实现自己的决策者。创建一个实现 BWC\Component\AssertionVoter\DecisionMakerInterface
的服务并标记它
my.custom.assertion.decision_maker:
class: My\Custom\DecisionMakerServiceClass
tags:
- { name: appsco.assertion.decision_maker, alias: my_decision_maker }
现在您可以运行针对它的断言
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');
}
注意 RoleResolver::resolve 方法中的第二个参数。它必须与
appsco.assertion.decision_maker
类中的别名匹配。