You are not logged in.

Announcement

 Téléchargez la dernière version stable de GLPI      -     Et vous, que pouvez vous faire pour le projet GLPI ? :  Contribuer
 Download last stable version of GLPI                      -     What can you do for GLPI ? :  Contribute

#1 2012-01-27 12:33:32

khena
Member
Registered: 2012-01-27
Posts: 3

[webservice] GetObject & canView()

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

Board footer

Powered by FluxBB