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 2020-09-30 17:41:16

aizen
Member
Registered: 2020-09-14
Posts: 6

Donner le droit d'utiliser un plugin à un utilisateur

Bonjour,

Malgré les difficultés, j'avance tout doucement sur la création de mon plugin. Actuellement, je n'ai pas de problème pour y accéder via l'utilisateur"glpi" (super admin ?).
En revanche, lorsque je tente d'y accéder en tant que "tech", j'ai le message suivant :

"You don't have permission to perform this action."

Comment puis-je définir, au sein de mon plugin, les utilisateurs qui ont le droit de l'utiliser ? J'ai peut être mal cherché, mais je n'ai rien trouvé dans la documentation liée au développement d'un plugin.

Version utilisée (au cas où) : GLPI 9.5

En espérant que vous pourrez m'aider.

Merci !

Edit :

Voici ma méthode canCreate() :

public static function canCreate()
{
     return Session::haveRight('entity', UPDATE);
}

Si je fais :

public static function canCreate()
{
     return true;
}

Ca fonctionne, mais je ne tiens pas à donner les droits à tout le monde.

Si vous avez des pistes, je suis preneur !

Last edited by aizen (2020-09-30 17:46:05)

Offline

#2 2020-09-30 19:00:56

btry
Moderator
Registered: 2015-10-01
Posts: 588

Re: Donner le droit d'utiliser un plugin à un utilisateur

Bonjour

A priori votre classe n'a pas de propriété $rightname définie (voir CommonDBTM). Dans ce cas, votre premier exemple donnera le droit de création à votre itemtype quand l’utilisateur a le droit UPDATE sur les entités. Par défaut un tech n'a pas ce droit.

Dans votre 2e exemple, tout le monde a le droit d'update sur votre itemtype; ce n'est généralement pas souhaitable.

Commencez par explorer les droits de GLPI pour voir si l'un d'eux correspond bien à votre besoin. Par exemple, Formcreator donne le droit d'administration des formulaires à ceux qui ont le droit UPDATE sur les entités. Voyez la classe PluginFormcreatorForm dans le code. Pour réutiliser un droit de GLPI, définissez la valeur de $rightname dans votre classe :

class PluginFooBar 
{
   public static $rightname = 'computer';
}

Avec cela, vous pouvez vous calquer sur un droit de GLPI et bien souvent il n'y a pas besoin de réimplémenter des méthodes can* .

Si aucun droit de GLPI ne correspond bien à votre besoin, alors vous devrez en créer un nouveau, propre à votre plugin. Il faut lui choisir un nom qui ne risque pas d'entrer en collision avec un plugin ou le coeur de GLPI (quand de nouveaux droits sont créés). J'ai personnellement l'habitude de nommer les droits de mes plugins avec le nom du plugin, un deux points et un nom de mon choix. Par exemple : "flyvemdm:fleet" (classe PluginFlyvemdmFleet dans le plugin FlyveMDM). Je rappelle que c'est une convention personnelle, elle n'est pas explicitement recommandée dans la documentation. Si vous créez un nouveau droit vous devrez prévoir une interface pour les ajuster et les définir à l’installation du plugin. Voyez FlyveMDM par exemple (classe PluginFlyvemdmProfile qui ajoute un onglet aux profils pour fournir l'interface). Je crois aussi que le plugin exemple montre comment faire; les deux plugin auront probablement des techniques un peu différentes.


No support with MP - Always run an upgrade task on a testing instance before running it on production! Always backup before any upgrade task!

Offline

#3 2020-10-01 17:05:10

aizen
Member
Registered: 2020-09-14
Posts: 6

Re: Donner le droit d'utiliser un plugin à un utilisateur

Bonjour btry,

Merci pour votre réponse, je vais fouiller dans l'example plugin voire FlyveMDM et/ou Formcreator. Si je n'y arrive pas, je reviendrai vers vous.

Je me permets de poser une autre question rapidement. Mon plugin consiste à créer un nouvel onglet dans la partie "ticket" de glpi. J'ai mon onglet "temps saisi" qui affiche le formulaire que je veux. Je peux ajouter, modifier, supprimer un temps saisi pour le dit ticket, jusque là, pas de problème. Les données sont bien ajoutées à la table générée par mon plugin.

En revanche, ça coince pour la partie "history et logs".

Mon fichier ticketcosts.class.php possède une class qui extends de CommonDBTM :

class PluginTicketformTicketcosts extends CommonDBTM

Dans : ticketcosts.form.php, je procède ainsi :

    $object = new PluginTicketformTicketcosts();

    //Check CREATE ACL
    $object->check(-1, CREATE, $_POST);
    //Do object creation
    
    
    $newid = $object->add($_POST);
    
    if ($newid) {    
        Event::log($_POST['tickets_id'], "tickets", 4, "tracking",
                    //TRANS: %s is the user login
                    sprintf(__('%s adds a cost'), $_SESSION["glpiname"]));
    }
    Html::back();

Lorsque je crée un nouveau coût, les données sont bien ajoutées à la table "glpi_events", mais rien ne s'ajoute dans la table "glpi_logs". En fouillant un bon moment, je pense avoir compris le problème :

$object->add($_POST);

La fonction "add" vient de CommonDBTM (héritée par ma class). Dans cette même fonction, la fonction "post_addItem()" est appelée. Le problème, c'est que cette méthode est vide et ne contient rien. En revanche, j'ai remarqué que la class "TicketCost" héritait de CommonITILCost qui elle même hérite de CommonDBChild et c'est dans cette dernière que la méthode "post_addItem()" semble gérer l'historique :

Log::history($item->getID(), $item->getType(), $changes, $this->getType(),
                      static::$log_history_add);

J'ai bien tenté d'hériter de CommonITILCost au lieu de CommonDBTM, mais ça fait tout planter. Lorsque je clique sur un ticket déjà crée ou que je souhaite en créer un nouveau, je n'ai plus les droits (même en super admin) :

Vous n'avez pas les droits requis pour réaliser cette action.

Je suis donc un peu coincé... Est-ce que vous auriez des suggestions ou des pistes pour gérer l'historique de mes propres objets s'il vous plaît ?

Merci !

Offline

#4 2020-10-16 17:14:30

yllen
GLPI-DEV
From: Sillery (51)
Registered: 2008-01-14
Posts: 15,273

Re: Donner le droit d'utiliser un plugin à un utilisateur

Pour les droits vous devez créer un formulaire dans l'objet profil (https://forge.glpi-project.org/projects … jet-Profil)


CentOS 6.5 - CentOS 7.x
PHP 5.6 - PHP 7.x - MySQL 5.6  - MariaDB 10.2 + APC + oOPcache
GLPI from 0.72 to dev version
Certifiée ITIL (ITV2F, ITILF, ITILOSA)

Offline

Board footer

Powered by FluxBB