Anomalie #24144
En cas de changement d'utilisateur sur un même poste, on voit les ressources de l'utilisateur précédent
100%
Description
Les bonnes ressources sont chargées si on clique sur le bouton refresh
Cela semble venir du eStorage
J'ai augmenté les logs dans AppsBehavior, et quand le cas se présente, je vois qu'il va chercher dans le cacheRessources du eStorage
Nous avons communiqué aux quelques personnes du Rectorat qui utilisent des comptes de test et qui nous avaient signalé le problème, mais ce qui m'embête un peu c'est pour les postes partagés (salle des profs d'établissement, etc...)
Je ne saisis pas encore totalement le mécanisme du eStorage
Le ressources.php renvoie bien les bonnes applis
J'ai eu un cas également ou les ressources poshprofils étaient bonnes et les ressources Arena non (et dans le log, les premières étaient noté WEB (pas de cache), les autres CACHE
Je continue d'investiguer (peut-être c'est un mauvais paramètre chez nous...)
Associated revisions
Fixes #24144 : le hash est identique pour tous les users en cas d'absence de FederationKey
History
#1 Updated by Renaud Dussol about 5 years ago
Après discussion avec C. Léon, il apparaît que le pb vient du fait que nous ne disposons pas de l'attribut CAS "FederationKey" (qui vient de l'annuaire SCRIBE, que nous n'avons pas)
Pour résoudre le pb rapidement, 2 solutions :
dans ng/Entity/Profil.php, fonction getIntid(), l. 80 :
remplacer :
if (!$intid) $intid = $this->getAttribute("FederationKey");
par :
if (!$intid) $intid = $this->getAttribute("user");
ou bien :
Sur le serveur CAS (eolesso), dans le fichier dispatcher.ini dans /usr/share/sso/app_filters :
ajouter FederationKey=mail
Je laisse la demande ouverte car il faudrait que l'une des 2 solutions soit mises en oeuvre au niveau de la distrib (ou une autre si ces solutions posent pb dans le cadre d'un ENT)
En effet c'est problèmatique pour les académies qui n'ont pas d'annuaire Scribe, mais juste un LDAP académique
Je te laisse juger de la plus pertinente
#2 Updated by Renaud Dussol about 5 years ago
- % Done changed from 0 to 60
Voici ce que je propose :
Dans Entity/Profil.php :
public function getIntid()
{
$intid = $this->getAttribute("intid");
if (!$intid) {
if ($this->getAttribute("FederationKey")) {
// echo "On utilise FedrationKey".$this->getAttribute("FederationKey");
$intid = $this->getAttribute("FederationKey");
}
elseif ($this->getAttribute("mail")) {
// echo "On utilise mail".$this->getAttribute("mail");
$intid = $this->getAttribute("mail");
} else {
// echo "On utilise user".$this->getAttribute("user");
$intid = $this->getAttribute("user");
}
}
// echo $intid; die();
return $intid ;
}
On fait un test sur FederationKey, si non un test sur mail, enfin un test sur user (parce qu'on est certain que celui-ci sera toujours là)
Sinon il y aurait une autre possibilité : s'arrêter à mail et si le getHash retourne "d41d8cd98f00b204e9800998ecf8427e" (résultat du md5 quand la chaîne d'entrée est vide), utiliser dans les fonctions le hashuser qui, lui provient directement du user
en gros, à chaque fois qu'on utilise $token->hash
if ($token->hash === "d41d8cd98f00b204e9800998ecf8427e") {
... on utilise $token->hashuser
ou alors dans le defaultController, modifier l'initialisation du token :
$token=\R::dispense( 'hubtoken' );
$token->hash = $profil->getHash();
$token->hashuser = $profil->getHashWithUser();
if ($token->hash === "d41d8cd98f00b204e9800998ecf8427e") {
$token->hash = $token->hashuser; // ou = $profil->getHashWithUser();
}
#3 Updated by Renaud Dussol about 5 years ago
Je te laisse choisir la solution, tu me dis et je commite
#4 Updated by Renaud Dussol about 5 years ago
- Status changed from Nouveau to Résolu
- % Done changed from 60 to 100
Appliqué par commit facd0cfc3d86a5c00b1444b5ae729b4ea82cd27e.
#5 Updated by Arnaud FORNEROT almost 5 years ago
- Target version set to Envole 5.10
#6 Updated by Arnaud FORNEROT almost 5 years ago
- Status changed from Résolu to Fermé