appsco/assertion-voter-bundle

该包最新版本(1.0.1)没有提供许可信息。

断言投票包

安装: 110

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 4

分支: 1

类型:symfony-bundle

1.0.1 2014-05-23 14:02 UTC

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 投票记录提供者

  1. (必需)创建投票记录实体

    通常看起来像这样

     <?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;
         }
     }
    
  2. (必需)指导包使用它

    app/config/config.yml 中设置 voter_record_providerappsco.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 投票记录提供者

  1. (必需)指导包使用它

    app/config/config.yml 中设置 voter_record_providerappsco.assertion.voter_record_provider.dbal

    示例

     # app/config/config.yml
     appsco_assertion_voter:
         voter_record_provider: appsco.assertion.voter_record_provider.dbal
    
  2. (可选)自定义表名和字段

    默认情况下,它将尝试从 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
    

使用自定义投票记录提供者

如果您使用其他持久层,可以轻松地将包与其集成。

  1. (必需)创建提供者服务

    创建自己的服务,该服务实现 Appsco\AssertionVoterBundle\VoterRecordProvider\VoterRecordProviderInterface 并将其在容器中注册。

  2. (必需)指导包使用它

    app/config/config.yml 中设置 voter_record_provideryour.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 类中的别名匹配。