Anomalie #5404
ferméCorruption de rôles (et us_t_roles) par UserAccount::refreshDocUser()
100%
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',
),
)