« Previous - Version 13/22 (diff) - Next » - Current version
Alexandre Cases, 06/03/2016 10:41 am


Documentation technique

Cette page décrit les différents concepts techniques utilisés dans le projet.

[ Retour au sommmaire ]


LIENS UTILES


Schéma de la base de données (v2.0.0)

Error executing the thumbnail macro (Attachment BDD_IRAP.png not found)


Gestion des mails de management

  • L'envoi de mail en local est réalisé grace à une adresse créer pour labinvent et donc le protocole d'envoi est défini dans app.php, lors de l'envoi d'un mail il faut utiliser le transport 'gmail' en local.

Mail : / Mot De Passe : cakephp3

  • Pour changer de mail et de transport, il faut aller dans la section Email/Transport de app.php, remplacer l'adresse et son mot de passe, puis il faut définir un protocole d'envoi compatible avec l'adresse mail rentré précédemment.

Tests (Mise en place et éxécution)

  • CakePHP permet aussi de gérer les tests facilement et de générer leurs squelettes avec la commande "bake".
    --> Pour commencer il faut récupérer phpunit (https://phpunit.de/), si la version de PHP est inférieur à 5.6, il faut télécharger le phpunit.phar compatible avec PHP, sinon il faut prendre la derniere version (compatible avec PHP7 également).
    --> Il faut configurer une base de donnée pour les tests dans "app.php"
    Commande génération test (se placer à la racine du projet ./labinvent) : 
    
    bin/cake bake test "type_src" "nom_table" 
    
    "type_src" correspond à Controller, Table, Entity, Form, Helper, Fixture...
    

LDAP

  • Pour le développement, j'utilise openLDAP pour avoir un LDAP et y connecter Labinvent2, pour gérer openLDAP, j'utilise l'outil de configuration phpLDAPadmin.
    --> J'utilise une VM oû les outils d'openLDAP sont déja installés et configurés.
    --> Il suffit de récupérer la machine virtuelle prête à l'emploi, et de lui attribuer manuellement une adresse IP libre (en général x.x.x.253/254) et son masque
    --> Aller sur une autre machine (physique ou virtuelle), et taper l'adresse ip défini précédement dans un navigateur
    --> Vous accéderez à une page de gestion (phpLdapAdmin)
    --> ATTENTION -> Votre PC doit être branché en filaire pour que la machine virtuelle soit accessible

https://www.turnkeylinux.org/openldap

Gestion des ACL (droits des utilisateurs selon leur profil)

  • CakePHP3 n'intègre plus un composant pour un gérer les ACLs, un plugin est à disposition pour remplacer ce composant, hélas il n'est pas stable, et le fait qu'il utilise la base de données ralenti les applications, car le composant effectue beaucoup de requêtes.
  • De plus, il est conseillé pour des autorisations basiques d'utiliser la fonction isAuthorized($user) dans les controller.
  • Dans labinvent2, on utilise la fonction isAuthorized($user), qui définit les choses que les utilisateurs connecté peuvent faire et donne tous les droits au Super-Admin dans AppContoller.php.
    Puis, dans chaque controller la fonction est redéclarer, on définit les actions possible pour chaque rôle.
  • Procédure ajout d'une fonctionnalité
    - On ajoute la fonctionnalité dans le controller
    - Si la fonctionnalité est accessible par tout le monde, il faut l'ajouter dans le isAuthorized($user) de l'AppController
    - Sinon il faut ajouter la condition lié à l'action dans la fonction isAuthorized($user) du controller correspondant (1ère fonction de tous les controllers)
    - Enfin lorsque vous réalisez la vue correspondante, il faut cacher les champs/boutons de votre fonctionnalité en fonction de vos droits, une variable "$role" est accessible dans toutes les vues, ainsi qu'une variable "$username" (nom de l'utilisateur, pas le login) pour tester la proriété d'un objet dans une vue.
  • Si vous avez besoin de vérifier la propriété d'un objet pour un utilisateur, il faut utiliser la fonction "isOwnedBy" (déja défini dans materiels, suivis, emprunts)
    * Exemple de la fonction provenant du controller Materiels :
    
    public function isOwnedBy($id, $nomUtilisateur)
    {
        return ($this->Materiels->exists(['id' => $id, 'nom_createur' => $nomUtilisateur]) || $this->Materiels->exists(['id' => $id, 'nom_responsable' => nomUtilisateur]));
    }
    
  • Exemple 1 : Ajout de la fonctionnalité désarchivé avec un bouton sur la view d'un matériel (pour les adminplus+)
  • On se place dans le controller Materiels, on y définit la fonction correspondante "setStatusArchived($id)".
  • Dans la fonction "isAuthorized($user)" du même controller, rajouter les lignes suivante :
    if (in_array($action, ['setStatusArchived'])) {
        if (in_array($role, ['Administration Plus', 'Super Administrateur'])) {
            return true;
        }
    }
    
  • Puis on se place dans la view de materiels, et on affiche le bouton selon les mêmes conditions que l'action "setStatusArchived($id)" dans la fonction "isAuthorized($user)".
  • Exemple 2 : Ajout d'une action "exportQrCode()" (pas très utile) pour tout le monde
  • On se place dans la fonction "isAuthorized($user)" de l'AppController.
  • Puis on ajoute l'action à la liste qui est autoriser à tout le monde
    //Pour tout le monde
    if (in_array($action, ['index', 'find', 'view', 'creer', 'add', 'exportQrCode'])) return true;
    

Autres remarques

  • Mode debug personnalisé :

Faire $this->myDebug($var) dans un controlleur pour afficher le contenu de la variable si mode debug personnalisé actif, à condition que le mode debug soit activé.

Voir : http://book.cakephp.org/3.0/fr/development/testing.html

  • Pour charger une librairie (ex : phpqrcode, ...)

Voir : http://book.cakephp.org/3.0/fr/core-libraries/app.html#charger-les-fichiers-de-vendor

  • Pour créer les fichiers pdf d'entrée et de sortie, on utilise fpdf 1.8.1, on pourrait utiliser le plugin développé pour CakePHP3.

Voir : https://github.com/FriendsOfCake/CakePdf

  • Pour le JavaScript, le JS Helper a été retiré

Voir : http://book.cakephp.org/3.0/fr/appendices/3-0-migration-guide.html#jshelper

BDD_IRAP.png (171 KB) Alexandre Cases, 06/30/2016 03:41 pm