You are not logged in.
Pages: 1
Bonjour,
suite à une tentative de récupération d'un objet NetworkPort via la fonction Webservice glpi.getObject, j'avais continuellement le message Command not allowed (NetworkPort). Cette fonction utilise la méthode methodGetObject($params, $protocol) du fichier methodinventaire.class.php (ligne 158).
La méthode methodGetObject fait appel à la fonction canView() de l'objet demandé à la ligne 201. Ici, pour NetworkPort, la méthode canView() est surchargée de la façon suivante.
function canView() {
if (isset($this->fields['itemtype'])) {
$item = new $this->fields['itemtype']();
return $item->canView();
}
return false;
}
La visibilité du port à donc la même valeur que le matériel auquel il est rattaché.
Hors, dans la fonction methodGetObject du fichier methodinventaire.class.php, à la ligne 201
$item = new $p['itemtype'];
if (!$item->canView()) {
return self::Error($protocol, WEBSERVICES_ERROR_NOTALLOWED, '', $params['itemtype']);
}
if (!$item->getFromDB($p['id'])
|| !$item->can($p['id'], 'r')) {
return self::Error($protocol, WEBSERVICES_ERROR_NOTFOUND);
}
L'objet NetworkPort est créé, il est testé puis il est initialisé.
Je propose la correction suivante : inverser le test de visibilité et l'initialisation depuis la base de données.
$item = new $p['itemtype'];
if (!$item->getFromDB($p['id'])
|| !$item->can($p['id'], 'r')) {
return self::Error($protocol, WEBSERVICES_ERROR_NOTFOUND);
}
if (!$item->canView()) {
return self::Error($protocol, WEBSERVICES_ERROR_NOTALLOWED, '', $params['itemtype']);
}
Débutant dans l'utilisation du webservice, il y a peut-être certaines implications que je ne vois pas, mais ça me semble plus cohérent de charger l'élément puis de tester sa validité.
Offline
Pages: 1