PrototypePHP (ou protophp) est un canevas de développement d'application PHP, qui inclut par défaut un certain nombre de « bonnes pratiques » :
stockage des paramètres dans un dossier « protégé »
utilisation des classes usuelles : adodb, smarty, mais aussi esup-cas pour l'identification auprès d'un serveur SSO – CAS, objetBDD pour l'accès aux tables (évite l'écriture des commandes de lecture ou d'écriture en base de données), ou phpgacl, pour la gestion des droits
utilisation d'une feuille de style paramétrée (css)
pour faciliter la compréhension de l'architecture, un « petit bout » d'application a été écrit pour gérer les logins (s'ils sont gérés en base de données), ainsi que la page d'accueil de l'application.
Décompresser le fichier protophp.xx.gz dans une branche de l'arborescence du serveur web, puis renommer le dossier au nom de l'application à développer.
Deux scripts sont fournis : l'un pour créer uniquement la table LoginGestion, l'autre pour créer l'ensemble de la base de données phpgacl.
Si l'on souhaite gérer les droits dans la même application, créer la base de données complète. Si on souhaite gérer uniquement les logins dans l'application, créer la table LoginGestion. Si on veut gérer les droits à partir d'un SSO-CAS, et que la base de données PHPGACL est stockée ailleurs, alors ne rien créer...
Les scripts sont prévus pour MySql. Créer la base de données au préalable, y associer un login, puis exécuter ensuite le script de création de la base de données souhaité avec vos outils habituels. Personnellement, j'utilise surtout phpmyadmin...
Les paramètres généraux de l'application sont stockés dans deux fichiers : param/param.default.inc.php, et param/param.inc.php. En cas de livraison d'une nouvelle version de l'application, seul le fichier param.default.inc.php est relivré, ce qui évite d'écraser les paramètres locaux d'exécution sur les plates-formes mises à jour.
Mettre à jour les paramètres par rapport à votre propre base de données.
Il faut aussi renseigner les paramètres spécifiques à phpgacl, dans le fichier param/gacl.ini.php. Une version ultérieure intégrera les deux fichiers de paramètres en un seul.
Donner les droits totaux sur les dossiers suivants : plugins/phpgacl/admin/templates_c et templates_c.
Vérifier que le dossier ident est redirigé vers https (directive dans .htaccess)
Vérifier que le dossier param est inaccessible (directive dans .htaccess)
Quel que soit votre mode d'identification (base de données, CAS, ou LDAP), vous devez disposer d'un login admin (sinon, utilisez la première fois l'identification par base de données, puis définissez les droits adéquats dans le module phpgacl). Les scripts de création de la base de données créent par défaut deux login :
admin, mot de passe password
gestion, mot de passe password
Lancer l'application (proto/index.php), identifiez-vous avec le login admin, puis allez dans Administration>Gestion des droits.
Deux onglets sont indispensables pour gérer correctement les droits : ACL Admin, qui permet de créer les logins et les groupes d'objets auxquels on va donner les droits, et ARO group Admin, dans lequel on va organiser les logins par groupes d'utilisateurs. Les droits seront ensuite attribués dans l'onglet ACL Admin, en sélectionnant les « Access Control Objects » et les « Groups ».
Par défaut, deux droits principaux ont été créés dans l'application proto : admin, et gestion, et deux complémentaires (pour montrer le fonctionnement des droits hérités) gestionAdmin et gestionValid. Le login admin peut indifféremment accéder à tous les modules qui nécessitent soit les droits gestion, gestionadmin ou gestionvalid, alors que le login gestion n'a accès qu'aux pages du niveau gestion.
Les droits peuvent être consultés par l'intermédiaire de l'onglet ACL list ou ACL test (en 2 dimensions uniquement dans cette configuration).
Consultez la doc de phpgacl, et regardez comment ont été écrits les scripts de gestion des droits dans le dossier ident (ident/identification.php, ident/ident.inc.php, ident/identification.class.php).
Il suffit de rajouter les trois lignes suivantes :
if(!isset($path_inc)) $path_inc = "../";
include_once($path_inc."common.inc.php");
getgacl("admin");
$path_inc permet de spécifier la racine par rapport à la page courante (ici, on doit redescendre « d'un étage » dans l'arborescence pour retrouver la racine de l'application).
La fonction getcacl permet de vérifier que le login (déjà saisi, ou qui sera saisi) dispose des droits « admin » dans l'application, droits définis dans phpgacl.
Les pages sont prévues pour être organisées en 3 niveaux : un entête (qui comprend les barres de menu), un corps et un enpied (standard).
Le nom des pages SMARTY étant paramétré, il suffit d'indiquer dans la variable smarty correspondante le nom du template correspondant au corps, puis d'afficher la page générale (en principe, en utillsant la page index.php à la racine de l'application) :
$smarty->assign("corps","main.tpl");
include($path_inc."index.php");
Les menus sont gérés notamment avec la feuille de style. L'application permet de travailler avec deux menus : un menu principal, et un menu secondaire. L'affichage et la configuration des menus sont gérés par des pages spécifiques, stockées dans le dossier menu, qui sont incluses dans la page principale :
include ($path_inc."menu/menuadministration.php");
C'est cette page qui contiendra les paramètres spécifiques d'affichage, de modification des couleurs... Les éléments de chaque item de menu sont numérotés, ce qui permet de faciliter l'affichage ou le masquage de chacun.
On utilise des variables spécfiques pour gérer les menus :
$menuselected correspond à l'item en cours du menu principal
$menusecselected correspond à l'item en cours du menu secondaire
$menuactif est un tableau permettant d'afficher ou non l'item correspondant, pour le menu principal
$menusecactif est un tableau permettant d'afficher ou non l'item correspondant du menu secondaire.
Par défaut, l'application est conçue pour afficher un message juste en dessous des menus. Pour afficher un message, il suffit de renseigner la variable de session $_SESSION["message"] dans le script. Elle sera alors affichée par l'intermédiaire de la page index.php :
$_SESSION["message"] = "identification réussie !";