Projet

Général

Profil

Anomalie #5404

Corruption de rôles (et us_t_roles) par UserAccount::refreshDocUser()

Ajouté par Jérôme Augé il y a plus de 5 ans. Mis à jour il y a plus de 5 ans.

Statut:
Intégré
Priorité:
Normal
Assigné à:
Version cible:
Début:
26/02/2015
Echéance:
% réalisé:

100%

Temps estimé:
Version source:
Solution proposée:
Principaux fichiers impactés:
Complexité:
Contrôle:
Thème:
Socle technique
Régression:
Oui
Jalons:

Description

Sur un contexte précis, j'ai le cas d'un compte utilisateur pour lequel le fait d'éditer et sauver sa fiche sans apporter aucune modification lui supprime un rôle qui était précédemment positionné sur lui.

L'instruction `$this->SetValue("us_roles", $rolesIds);` à la ligne 167 de `Class.UserAccount.php` peut corrompre (décaler) les données de l'attribut `us_t_roles` car elle affecte la colonne `us_roles` sans tenir compte des colonnes connexes :

                $rolesIds = $wuser->getRoles(false);
                $this->SetValue("us_roles", $rolesIds);

- La méthode `UserAccount::refreshDocUser()` décale un id de rôle censé être positionné en direct (ligne avec "internal") sur l'utilisateur et qui se retrouve alors en face d'une ligne "group".
- Comme la valeur du rôle ce retrouve sur une ligne "group", lors de l'édition de l'utilisateur, la méthode `UserAccount::preEdition()` ne va pas prendre en compte cette ligne et me donner un tableau vide en édition.
- A la sauvegarde, le tableau étant vide, le rôle sera supprimé sur l'utilisateur.

Valeurs retournés par l'instruction `$wuser->getRoles(false)` :

Dcp\Core\UserAccount::refreshDocUser:167 rolesIds = array (
  0 => '98937',
)

Contenu correct de `us_t_roles` avant l'instruction `$this->SetValue("us_roles", $rolesIds)` :

Dcp\Core\UserAccount::refreshDocUser:167 array (
  0 =>
  array (
    'us_roles' => '98933',
    'us_rolesorigin' => 'group',
    'us_rolegorigin' => '1291<BR>1572<BR>1212<BR>1236<BR>4771',
  ),
  1 =>
  array (
    'us_roles' => '98938',
    'us_rolesorigin' => 'group',
    'us_rolegorigin' => '1573<BR>1222',
  ),
  2 =>
  array (
    'us_roles' => '98937',
    'us_rolesorigin' => 'internal',
    'us_rolegorigin' => '',
  ),
  3 =>
  array (
    'us_roles' => '98937',
    'us_rolesorigin' => 'group',
    'us_rolegorigin' => '11388<BR>11402',
  ),
  4 =>
  array (
    'us_roles' => '98935',
    'us_rolesorigin' => 'group',
    'us_rolegorigin' => '1577<BR>1234',
  ),
  5 =>
  array (
    'us_roles' => '98934',
    'us_rolesorigin' => 'group',
    'us_rolegorigin' => '1290<BR>1578<BR>1195<BR>1211<BR>1155',
  ),
)

Contenu "corrompu" de `us_t_roles` après l'instruction `$this->SetValue("us_roles", $rolesIds)` :

Dcp\Core\UserAccount::refreshDocUser:169 array (
  0 =>
  array (
    'us_roles' => '98937',
    'us_rolesorigin' => 'group',
    'us_rolegorigin' => '1291<BR>1572<BR>1212<BR>1236<BR>4771',
  ),
  1 =>
  array (
    'us_roles' => '',
    'us_rolesorigin' => 'group',
    'us_rolegorigin' => '1573<BR>1222',
  ),
  2 =>
  array (
    'us_roles' => '',
    'us_rolesorigin' => 'internal',
    'us_rolegorigin' => '',
  ),
  3 =>
  array (
    'us_roles' => '',
    'us_rolesorigin' => 'group',
    'us_rolegorigin' => '11388<BR>11402',
  ),
  4 =>
  array (
    'us_roles' => '',
    'us_rolesorigin' => 'group',
    'us_rolegorigin' => '1577<BR>1234',
  ),
  5 =>
  array (
    'us_roles' => '',
    'us_rolesorigin' => 'group',
    'us_rolegorigin' => '1290<BR>1578<BR>1195<BR>1211<BR>1155',
  ),
)

Historique

#1 Mis à jour par Jérôme Augé il y a plus de 5 ans

Dans mon cas, la corruption fait suite à un appel à synchronizeSystemUser() (qui à son tour appelle refreshDocUser() qui décale les valeurs).

#2 Mis à jour par Marc Claverie il y a plus de 5 ans

  • Statut changé de Nouveau à À analyser
  • Assigné à mis à Éric Brison
  • Version cible mis à 3.2.19

#3 Mis à jour par Marc Claverie il y a plus de 5 ans

  • Régression mis à Oui

#4 Mis à jour par Dynacase Admin il y a plus de 5 ans

  • Statut changé de À analyser à Assigné
  • Assigné à changé de Éric Brison à Jérôme Augé

#5 Mis à jour par Jérôme Augé il y a plus de 5 ans

  • % réalisé changé de 0 à 100

#6 Mis à jour par Éric Brison il y a plus de 5 ans

  • Statut changé de Assigné à Intégré

Appliqué par commit dynacase-core|commit:ddb58d3db07e198427c2d2240b8266b899da3e52.

Formats disponibles : Atom PDF