2017 © Pedro Peláez
 

symfony-bundle invitation-bundle

Provides a way to secure routes behind a special 'invitation code only' security firewall.

image

cethyworks/invitation-bundle

Provides a way to secure routes behind a special 'invitation code only' security firewall.

  • Friday, July 21, 2017
  • by Cethy
  • Repository
  • 1 Watchers
  • 0 Stars
  • 197 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 2 Versions
  • 1 % Grown

The README.md

Cethyworks/InvitationBundle

Provides a way to secure routes behind a special "invitation code only" security firewall., (*1)

CircleCI, (*2)

Install

1. Composer require, (*3)

$ composer require cethyworks/invitation-bundle 

2. Register bundles, (*4)

// AppKernel.php
class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = [
            // ...
            new Cethyworks\InvitationBundle\CethyworksInvitationBundle(),
        ];
        // ...

How to use

Invitation codes in memory

1. Update security.yml to add the invitation provider, invitations and firewall :, (*5)

security:
    # ...
    providers:
        in_memory_invitation_provider:
            invitation_memory:
                invitations:
                    - { code: foo }
                    - { code: bar }
    # ...
    firewalls:
        # ...            
        invitation:
            pattern: ^/invite-only-url
            provider: in_memory_invitation_provider
            guard:
                authenticator:
                    cethyworks_invitation.authenticator
            anonymous: false
        # ...

4. Go to /invite-only-url?code=foo. That's it., (*6)

To use emails with in memory provider :

1. Update config.yml :, (*7)

cethyworks_invitation:
    invitation_class: Cethyworks\InvitationBundle\Model\Invitation

2. Update security.yml :, (*8)

security:
        # ...
        providers:
            in_memory_invitation_provider:
                invitation_memory:
                    invitations:
                        - { code: foo, email: foo@email.foo }
                        - { code: bar, email: bar@email.bar }
        # ...

Invitation codes in database

1. Extends Cethyworks\InvitationBundle\Model\Invitation to persit it :, (*9)

<?php
namespace AppBundle\Entity;

use Cethyworks\InvitationBundle\Model\GenerateCodeTrait;
use Cethyworks\InvitationBundle\Model\Invitation as BaseInvitation;
use Doctrine\ORM\Mapping as ORM;

/**
 * Invitation
 *
 * @ORM\Table()
 * @ORM\Entity()
 */
class Invitation extends BaseInvitation
{
    // optional, provides a shortcut to generate random code
    use GenerateCodeTrait;

    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * Invitation constructor.
     */
    public function __construct()
    {
        $this->generateCode();
    }
}

2. Update config.yml with the new Invitation class :, (*10)

cethyworks_invitation:
    invitation_class: AppBundle\Entity\Invitation

3. Update security.yml to add the invitation provider and firewall :, (*11)

security:
    # ...
    providers:
        cethyworks_invitation_entity_provider:
            invitation_entity: ~
                # entity_property: 'code'
                # repository_method: 'findOneBy'
                # manager_name: null
    # ...
    firewalls:
        # ...            
        invitation:
            pattern: ^/invite-only-url
            provider: cethyworks_invitation_entity_provider
            guard:
                authenticator:
                    cethyworks_invitation.authenticator
            anonymous: false
        # ...

4. Go to /invite-only-url?code=some_code. That's it., (*12)

Todo

  • handle failure (redirection ?)
  • showcase repository
  • plugins :
    • attach invitation to user
    • form to manually set invitation code
    • consumeable
    • send invitation

The Versions