longitude-one/banned-bundle

Banned user (non)-authentication

1.0.0 2021-07-02 09:41 UTC

This package is auto-updated.

Last update: 2022-01-02 10:55:08 UTC


README

LongitudeOne\BannedBundle is a very small bundle for Symfony framework. Banned users won't be able to login on your application.

Installation

Make sure Composer is globally installed, as explained in the installation chapter of the Composer documentation.

Applications that use Symfony Flex

Open a command console, enter your project directory and execute:

$ composer require longitude-one/banned-bundle

Applications that don't use Symfony Flex

Step 1: Download the Bundle

Open a command console, enter your project directory and execute the following command to download the latest stable version of this bundle:

$ composer require longitude-one/banned-bundle

Step 2: Enable the Bundle

Then, enable the bundle by adding it to the list of registered bundles in the config/bundles.php file of your project:

// config/bundles.php

return [
    // ...
    LongitudeOne\BannedBundle\LongitudeOneBannedBundle::class => ['all' => true],
];

Configuration

First, your user class should implement the BannedInterface, then add the stub method isBanned.

Example

// src/Entity/User.php

namespace App\Entity;

// declare the interface
use LongitudeOne\BannedBundle\Entity\BannedInterface;
use Symfony\Component\Security\Core\User\UserInterface;

// add the interface
class User implements BannedInterface, UserInterface
{
    //Add a private property
    private bool $banned = false;

    //Your getter can be improved to avoid that an admin bans another one.        
    public function isBanned(): bool
    {
        //In this example admins cannot be banned
        return $this->isBanned() and !in_array('ROLE_ADMIN', $this->getRoles());
    }
    
    //Add a setter if needed
    public function setBanned(bool $banned): self
    {
        $this->banned = $banned;
        
        return $this;
    }
    
    //...    
}

Step2, configure the security layer:

Add the UserChecker service to your security config:

# config/security.yaml
security:
  ...
  firewalls:
    ...
    main:
      ...
      user_checker: lo_banned.user_checker

Jobs done!