Se faire passer pour un autre utilisateur sans dommages

Référence sur Drupal.org : 2 Juin 2009 – 03h47 - http://drupal.org/node/218104


Il y a une discussion pour déplacer cette fonctionnalité dans le core, pour que les développeurs puissent le faire sans risques : #287292: Add function to switch local user

Possibilités d’usurpation d’identité

Il y a plusieurs cas pour lesquels vous voudrez que votre code « usurpe » l’identité d’un autre utilisateur. C’est le cas lorsqu’une action d’utilisateur déclenche un autre processus. Si c’est autre processus doit être fait par un utilisateur différent, alors vous voudrez « usurper » l’identité de cet autre utilisateur.

Voici un exemple de code incorrect et risqué qui « usurpe » l’identité d’un autre utilisateur :

<?php
global $user;
$original_user $user;

$user user_load(array('uid' => 1));

// Take your action here where you pretend to be the user with UID = 1 (typically the admin user on a site)
// NOTE: - this is the unsafe part - if your code here fails, then the user suddenly has the permissions of UID 1!
$user $original_user;
?>

Le mode opératoire correct et sûr consiste à utiliser la fonction session_save_session() comme ci-dessous :

<?php
global $user;
$original_user $user;
session_save_session(FALSE);
$user user_load(array('uid' => 1));

// Take your action here where you pretend to be the user with UID = 1 (typically the admin user on a site)
// If your code fails, it's not a problem because the session will not be saved
$user $original_user;
session_save_session(TRUE);

// From here on the $user is back to normal so it's OK for the session to be saved
?>

Commentaires

Poster un nouveau commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <css>, <php>, <html>, <ccss>, <ccss>, <drupal5>, <drupal6>, <html>, <javascript>, <php>. Beside the tag style "<foo>" it is also possible to use "[foo]".
  • You may use [view:viewname] tags to display listings of nodes.

Plus d'informations sur les options de formatage

CAPTCHA
Cette question permet d'éviter le spam :
4 + 7 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.