mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
add flags to permissions groups
Flags can be added to permissions group to store some metadata. An interface `PermissionsGroupFlagProvider` allow to add some flag to the form which create/ edit permissions groups.
This commit is contained in:
parent
b1ae55ba80
commit
b9a7314975
@ -12,6 +12,7 @@ use Chill\MainBundle\DependencyInjection\CompilerPass\ExportsCompilerPass;
|
||||
use Chill\MainBundle\DependencyInjection\CompilerPass\WidgetsCompilerPass;
|
||||
use Chill\MainBundle\DependencyInjection\CompilerPass\NotificationCounterCompilerPass;
|
||||
use Chill\MainBundle\DependencyInjection\CompilerPass\MenuCompilerPass;
|
||||
use Chill\MainBundle\DependencyInjection\CompilerPass\ACLFlagsCompilerPass;
|
||||
|
||||
|
||||
class ChillMainBundle extends Bundle
|
||||
@ -27,5 +28,6 @@ class ChillMainBundle extends Bundle
|
||||
$container->addCompilerPass(new WidgetsCompilerPass());
|
||||
$container->addCompilerPass(new NotificationCounterCompilerPass());
|
||||
$container->addCompilerPass(new MenuCompilerPass());
|
||||
$container->addCompilerPass(new ACLFlagsCompilerPass());
|
||||
}
|
||||
}
|
||||
|
39
DependencyInjection/CompilerPass/ACLFlagsCompilerPass.php
Normal file
39
DependencyInjection/CompilerPass/ACLFlagsCompilerPass.php
Normal file
@ -0,0 +1,39 @@
|
||||
<?php
|
||||
/*
|
||||
*/
|
||||
namespace Chill\MainBundle\DependencyInjection\CompilerPass;
|
||||
|
||||
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Chill\MainBundle\Form\PermissionsGroupType;
|
||||
use Symfony\Component\DependencyInjection\Reference;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @author Julien Fastré <julien.fastre@champs-libres.coop>
|
||||
*/
|
||||
class ACLFlagsCompilerPass implements CompilerPassInterface
|
||||
{
|
||||
public function process(ContainerBuilder $container)
|
||||
{
|
||||
$permissionGroupType = $container->getDefinition(PermissionsGroupType::class);
|
||||
|
||||
foreach($container->findTaggedServiceIds('chill_main.flags') as $id => $tags) {
|
||||
$reference = new Reference($id);
|
||||
|
||||
foreach ($tags as $tag) {
|
||||
switch($tag['scope']) {
|
||||
case PermissionsGroupType::FLAG_SCOPE:
|
||||
|
||||
$permissionGroupType->addMethodCall('addFlagProvider', [ $reference ]);
|
||||
break;
|
||||
default:
|
||||
throw new \LogicalException(sprintf(
|
||||
"This tag 'scope' is not implemented: %s, on service with id %s", $tag['scope'], $id)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -58,7 +58,7 @@ class GroupCenter
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->permissionGroups = new ArrayCollection();
|
||||
$this->permissionsGroup = new ArrayCollection();
|
||||
$this->users = new ArrayCollection();
|
||||
}
|
||||
|
||||
|
@ -43,6 +43,12 @@ class PermissionsGroup
|
||||
*/
|
||||
private $name;
|
||||
|
||||
/**
|
||||
*
|
||||
* @var string[]
|
||||
*/
|
||||
private $flags = [];
|
||||
|
||||
/**
|
||||
*
|
||||
* @var \Doctrine\Common\Collections\Collection
|
||||
@ -109,6 +115,19 @@ class PermissionsGroup
|
||||
}
|
||||
}
|
||||
|
||||
public function getFlags()
|
||||
{
|
||||
return $this->flags;
|
||||
}
|
||||
|
||||
public function setFlags(array $flags)
|
||||
{
|
||||
$this->flags = $flags;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Test that a role scope is associated only once with the permission group
|
||||
*
|
||||
|
@ -5,9 +5,20 @@ namespace Chill\MainBundle\Form;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||
use Chill\MainBundle\Form\Utils\PermissionsGroupFlagProvider;
|
||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||
|
||||
class PermissionsGroupType extends AbstractType
|
||||
{
|
||||
/**
|
||||
*
|
||||
* @var PermissionsGroupFlagProvider[]
|
||||
*/
|
||||
protected $flagProviders = [];
|
||||
|
||||
const FLAG_SCOPE = 'permissions_group';
|
||||
|
||||
/**
|
||||
* @param FormBuilderInterface $builder
|
||||
* @param array $options
|
||||
@ -15,8 +26,40 @@ class PermissionsGroupType extends AbstractType
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$builder
|
||||
->add('name')
|
||||
->add('name', TextType::class)
|
||||
;
|
||||
|
||||
$flags = $this->getFlags();
|
||||
|
||||
if (count($flags) > 0) {
|
||||
$builder
|
||||
->add('flags', ChoiceType::class, [
|
||||
'choices' => \array_combine($flags, $flags),
|
||||
'multiple' => true,
|
||||
'expanded' => true,
|
||||
'required' => false
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getFlags(): array
|
||||
{
|
||||
$flags = [];
|
||||
|
||||
foreach ($this->flagProviders as $flagProvider) {
|
||||
$flags = \array_merge($flags, $flagProvider->getPermissionsGroupFlags());
|
||||
}
|
||||
|
||||
return $flags;
|
||||
}
|
||||
|
||||
public function addFlagProvider(PermissionsGroupFlagProvider $provider)
|
||||
{
|
||||
$this->flagProviders[] = $provider;
|
||||
}
|
||||
|
||||
/**
|
||||
|
18
Form/Utils/PermissionsGroupFlagProvider.php
Normal file
18
Form/Utils/PermissionsGroupFlagProvider.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace Chill\MainBundle\Form\Utils;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
interface PermissionsGroupFlagProvider
|
||||
{
|
||||
/**
|
||||
* Return an array of flags
|
||||
*
|
||||
* @return string[] an array. Keys are ignored.
|
||||
*/
|
||||
public function getPermissionsGroupFlags(): array;
|
||||
}
|
@ -14,6 +14,10 @@ Chill\MainBundle\Entity\PermissionsGroup:
|
||||
name:
|
||||
type: string
|
||||
length: 255
|
||||
flags:
|
||||
type: json
|
||||
options:
|
||||
default: '[]'
|
||||
manyToMany:
|
||||
roleScopes:
|
||||
targetEntity: Chill\MainBundle\Entity\RoleScope
|
||||
|
@ -33,6 +33,7 @@ services:
|
||||
- "@doctrine.orm.entity_manager"
|
||||
tags:
|
||||
- { name: form.type, alias: select2_chill_language }
|
||||
|
||||
chill.main.form.type.center:
|
||||
class: Chill\MainBundle\Form\Type\CenterType
|
||||
arguments:
|
||||
@ -130,5 +131,9 @@ services:
|
||||
arguments:
|
||||
$chillLogger: '@monolog.logger.chill'
|
||||
$passwordEncoder: '@Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface'
|
||||
tags:
|
||||
- { name: form.type }
|
||||
|
||||
Chill\MainBundle\Form\PermissionsGroupType:
|
||||
tags:
|
||||
- { name: form.type }
|
25
Resources/migrations/Version20180905101426.php
Normal file
25
Resources/migrations/Version20180905101426.php
Normal file
@ -0,0 +1,25 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace Application\Migrations;
|
||||
|
||||
use Doctrine\DBAL\Schema\Schema;
|
||||
use Doctrine\Migrations\AbstractMigration;
|
||||
|
||||
/**
|
||||
* Auto-generated Migration: Please modify to your needs!
|
||||
*/
|
||||
final class Version20180905101426 extends AbstractMigration
|
||||
{
|
||||
public function up(Schema $schema) : void
|
||||
{
|
||||
$this->addSql('ALTER TABLE permission_groups ADD flags JSONB DEFAULT \'[]\' NOT NULL');
|
||||
$this->addSql('ALTER TABLE group_centers ALTER permissionsgroup_id DROP NOT NULL');
|
||||
|
||||
}
|
||||
|
||||
public function down(Schema $schema) : void
|
||||
{
|
||||
$this->addSql('ALTER TABLE permission_groups DROP COLUMN flags');
|
||||
$this->addSql('ALTER TABLE group_centers ALTER permissionsgroup_id SET DEFAULT NULL');
|
||||
}
|
||||
}
|
@ -129,6 +129,7 @@ Edit password for %username%: Éditer le mot de passe de %username%
|
||||
Change password: Changer le mot de passe
|
||||
Back to the user edition: Retour au formulaire d'édition
|
||||
Password successfully updated!: Mot de passe mis à jour
|
||||
Flags: Drapeaux
|
||||
|
||||
#admin section for circles (old: scopes)
|
||||
List circles: Liste des cercles
|
||||
|
@ -9,6 +9,7 @@
|
||||
|
||||
{{ form_start(edit_form) }}
|
||||
{{ form_row(edit_form.name) }}
|
||||
{{ form_row(edit_form.flags) }}
|
||||
{{ form_row(edit_form.submit, { 'attr': { 'class': 'sc-button green' } } ) }}
|
||||
{{ form_end(edit_form) }}
|
||||
|
||||
|
@ -7,6 +7,7 @@
|
||||
|
||||
{{ form_start(form) }}
|
||||
{{ form_row(form.name) }}
|
||||
{{ form_row(form.flags) }}
|
||||
{{ form_row(form.submit, { 'attr': { 'class': 'sc-button green' } } ) }}
|
||||
{{ form_end(form) }}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user