Projet

Général

Profil

Actions

Anomalie #5404

fermé

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

Ajouté par Jérôme Augé il y a environ 11 ans. Mis à jour il y a environ 11 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

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',
  ),
)

Actions

Formats disponibles : Atom PDF