appsco/assertion-voter-bundle
Composer 安装命令:
composer require appsco/assertion-voter-bundle
包简介
Assertion Voter Bundle
关键字:
README 文档
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_providerinapp/config/config.ymltoappsco.assertion.voter_record_provider.ormSet
voter_record_classinapp/config/config.ymlto 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_providerinapp/config/config.ymltoappsco.assertion.voter_record_provider.dbalExample:
# 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
VoterRecordtable 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\VoterRecordProviderInterfaceand register it within container. -
(required) Instruct bundle to use it
Set
voter_record_providerinapp/config/config.ymltoyour.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_makerclass.
appsco/assertion-voter-bundle 适用场景与选型建议
appsco/assertion-voter-bundle 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 110 次下载、GitHub Stars 达 0, 最近一次更新时间为 2014 年 05 月 06 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「Assertion voter」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 appsco/assertion-voter-bundle 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 appsco/assertion-voter-bundle 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 appsco/assertion-voter-bundle 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
php ensurance
:TODO:
BDD style assertion library for PHP.
Additional functionality for PHPUnit (such as assertions)
Symfony bundle for time based feature flags
A modular access control library for Laravel applications.
统计信息
- 总下载量: 110
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 11
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: Unknown
- 更新时间: 2014-05-06