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