Jump to content
Sign in to follow this  
Skyll

La structure d'une application web

Recommended Posts

Bonjour à tous,

Pour mon premier post, je me décide, après avoir fait quelques recherches de mon coté, à poser à tous les spécialistes, dévellopeurs d'applications web ou webmaster, la question du choix de la structure d'une application web. J'utilise le mot application au sens large, je veux dire que ce soit un site, une interface de gestion...

Je travaille actuellement sur la conception/devellopement d'un outil de création de site et de gestion de contenu, donc une application de type CMS mais je suis certain que les questions que je me pose au stade ou j'en suis sont le genre de question que pose tout developpement sur le web. J'en suis à la conception détaillée de l'application, il y a un certain nombre de choix que j'ai déjà fait (type de base de donnée, POO, moteur template...) et je me retrouve devant la question de la structure même de l'application du point de vue du système de fichier.

Je me dirige donc vers une structure de type noyau autour duquel gravitent des modules, ce qui semble être le meilleur choix.

Cela dit je me pose la question de la gestion des parties publiques et des parties privées. Je vais essayer d'expliquer au mieux cette problématique et poser ensuite quelques questions. Je ne suis pas en train de parler d'accès aux parties privées en tant qu'utilisateur de l'application mais plutot de la séparation "physique" des aspects publics et privés, de leur interactivité et de la sécurité.

En terme de sécurité et pour poser la question générale de manière simple sans ambiguité :

De quelle façon rangez-vous vos scripts et pourquoi ?

Et en vrac :

- Est-il préférable de tout cloisonner catégoriquement ? (bibliothèque de script public et bibliothèque privée, quitte à avoir quelques doublons dans les fonctions ou les classes).

- Comment concilie-t-on une structure modulaire avec cet impératif du web que de ne pas donner un accès public à tout ?

Merci de m'avoir lu, j'espère que le problème que je pose est suffisament clair.

(Merci de déplacer ce sujet dans la rubrique la plus appropriée si nécessaire)

Share this post


Link to post
Share on other sites

Salut,

Je suis sur un gros projet avec plus ou moins les memes problemes (voir le cliens sur le club photo en signature : je suis en train de preparer une version 2 qui permettra aussi d'heberger d'autres type de sites comme des galeries de mariages ou d'evenement, avec une vrais gestion de contenu et tout et tout), le tout en PHP5, et totalement POO.

J'ai fait les separations suivantes :

- les pages publiques ... se trouvent evidement dans un repertoire publique ;D Cependant, certaines pages ont un comportement different suivant que le visiteur s'est authentifie au non.

- les pages d'administrations se trouvent dans un repertoire protege par un .htaccess.

Cependant, toutes ces pages ne contiennent que l'IHM, mais tout le moteur / la partie intelligente du site est gere par des objets qui sont definis dans des includes PHP placees totalement a l'exterieur de l'arbo web. L'interet est qu'ils ne sont accessibles qu'a Apache lui-même mais les visiteurs n'ont pas de moyen pour y acceder, meme si je fais une bourde au niveau de la securite web.

Par contre, il faut de a l'esprit que include et autres require de PHP sont totalement insensibles aux authentifications par .htaccess (donc si tu souhaites faire jouer la securite en placant des declaration dans differents repertoires comme le suggere ta question, ben ca ne marchera pas).

Alors comment se passe la securite ?

Dans toutes les pages qui necessitent un acces securise, je cree un objet Utilisateur en fonction du nom du visiteur ($_SERVER['PHP_AUTH_USER']). Dans mes objets, toutes les fonctions qui necessitent des droits admin verifient que l'utilisateur existe, et qu'il est bien admin.

Si c'est un objet mixte (qui peut etre a la fois utilise par les admin et les publiques), ce teste est fait dans chacune des methodes d'administration. Pour les objets d'admin pure, ce n'est fait que dans les constructeur.

Voila, si ca peut t'aider.

Share this post


Link to post
Share on other sites

Oui Cela est interessant. D'autant que je compte aussi adopter une structure en objet pour la partie intelligente du site.

Stocker les scripts en dehors du DocumentRoot oui c'est imparable mais je ne peux pas utiliser cette astuce. Les utilisateurs de la future application n'auront pas par définition dans le cahier des charges, d'accès à la configuration d'Apache. Je dois tout rassembler dans un répertoire racine donc dans la partie web du serveur.

L'authentification pour les parties privées se fera via un formulaire de login, il y a une hiéarchie des droits utilisateur sur trois ou quatre niveaux (infos stockée dans BD), et un système de session.

Comme dit, avant de me lancer dans le codage pur et dur j'essaye de structurer au mieux le tout pour la securité des bibliotheques de scripts. Donc je note ta solution : intégrer une verification des droits à même les fonctions qui sont réservées. Merci beaucoup pour ta participation.

Share this post


Link to post
Share on other sites

Bonjour Skyll,

Je relance le post après plus d'un an mais j'aimerais savoir si tu as trouvé ton bonheur ou des réponses à tes questions car cela m'intéresse également. Et je me permets d'y rajouter mes réflexions et mes questions si cela ne te dérange pas (auquel cas je publierai un nouveau sujet, bien-sûr).

Pour ma part, je suis éditeur/développeur d'un site dans lequel j'utilise le .htaccess (différent selon le répertoire) pour "privatiser" les données des utilisateurs (photos, vidéos, musiques) et les scripts "sensibles" que je place dans des répertoires différents sous /www (Document Root).

Cela fonctionne très bien depuis plus d'un an* et c'est "efficace" au niveau sécurité (en partant du principe que toute sécurité est relative, bien entendu).

Le problème du .htaccess est que c'est relativement peu ergonomique :

- apparition d'une fenêtre pour s'authentifier (j'ai remarqué qu'elle pouvait être déroutante pour certains utilisateurs),

- impossible de personnaliser cette fenêtre et donc son contenu.

- et surtout, déconnexion super contraignante (fermeture du navigateur et de toutes ses fenêtres. Ou effacement des sessions d'authentification via les options du navigateur éventuellement).

J'ai décidé de changer la structure du site. Je vais désormais placer toutes les données privées dans des répertoires situés à l'extérieur de l'arborescence Web (avant le Document Root /www donc).

Mais comme cela ne t'intéresse pas, je vais en parler dans un autre post.

Bon courage à toi et je reste dispo en MP si tu veux en discuter. Avec plaisir.

Merci à tous.

*Bon, je n'ai pas 10 000 utilisateurs et je gère pour l'instant moins de 5000 fichiers, mais ça fonctionne.

Edited by zeuf

Share this post


Link to post
Share on other sites

Si vous commencez à vous poser ce type de question, il pourrait être bon d'aller jeter un oeil aux différents types de framework qui existent.

Personnellement j'utilise symfony ( http://www.symfony-project.org ), mais il en existe d'autres comme cakePHP

Ils vont vous forcer à bien organiser votre code, et vont vous faciliter la vie pour maintenir de grosses applications.

Share this post


Link to post
Share on other sites

/librairies/perso => mes librairies

/librairies/ext => des frameworks annexes Zend, smarty, cake...

/javascript => comme son nom l'indique

/classes => les classes métiers spécifiques au site

/model => accès data

/conf => config

/templates => html-css

/cache/data => cache des données

/cache/tpl => cache template

/composants => les classes qui gèrent l'affichage

index

Grosso modo ça ressemble à ça pour ma part, en .net ou php +/- pareil

Edited by SStephane

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...