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 environ 5 ans. Mis à jour il y a environ 5 ans.

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

100%

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

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 environ 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 environ 5 ans

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

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

  • Régression mis à Oui

#4 Mis à jour par Dynacase Admin il y a environ 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 environ 5 ans

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

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

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

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

Formats disponibles : Atom PDF