sfDoctrineGuardPlugin: Ajout de permissions et de groupes après un register

Dans cet article, je vais vous montrer une solution pour ajouter des permissions et des groupes lors de la création d’un nouvel utilisateur avec le formulaire « Register » du plugin sfDoctrineGuardPlugin.

Pour cela nous allons personnaliser le modèle sfGuardUser en y ajoutant une fonction « addDefaultPermissionsAndGroups ». Vous trouvez cette classe dans le dossier lib/model/doctrine/sfDoctrineGuardPlugin/sfGuardUser.class.php. Voici le code à insérer:

class sfGuardUser extends PluginsfGuardUser
{
  public function addDefaultPermissionsAndGroups(Array $a_permissions, Array $a_groups)
  {
    $permissions = Doctrine_Query::create()->from('sfGuardPermission')->whereIn('name', $a_permissions)->execute();
    foreach ($permissions as $permission)
    {
      $this->sfGuardUserPermission[]->permission_id = $permission->id;
    }
    
    $groups = Doctrine_Query::create()->from('sfGuardGroup')->whereIn('name', $a_groups)->execute();
    foreach ($groups as $group)
    {
      $this->sfGuardUserGroup[]->group_id = $group->id;
    }
    
    $this->save();
  }
}

Nous allons maintenant utiliser ce code dans notre action:

$this->form = new sfGuardRegisterForm();

if ($request->isMethod('post'))
{
  $this->form->bind($request->getParameter($this->form->getName()));
  if ($this->form->isValid())
  {
    $user = $this->form->save();
    $user->addDefaultPermissionsAndGroups(
      array('read', 'write'),
      array('moderator')
    );
    
    $this->getUser()->signIn($user);

    $this->redirect('@homepage');
  }
}

Comme vous pouvez le voir dans le code ci-dessus, nous passons un premier tableau contenant le nom des permissions et un second avec le nom du(des) groupe(s). Il suffit ensuite d’effectuer le login de l’utilisateur pour lui assigner les autorisations.

J’espère que ce petit exemple vous servira dans les prochains développements.

Share

2 réflexions sur « sfDoctrineGuardPlugin: Ajout de permissions et de groupes après un register »

  1. Bonjour,
    Merci pour le code, c’est exactement ce que je recherchais. En plus ça fait plaisir de « tomber » sur des utilisateurs de Symfony en Suisse !

Répondre à Maxime Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *