Ce projet a été réalisé dans le cadre d'une journée d'initiation à l'utilisation d'un CMS headless (Strapi v5) combiné à un framework frontend moderne (Next.js).
L'objectif est de créer un petit blog collaboratif où les auteurs peuvent publier des articles et les visiteurs peuvent les consulter et laisser des commentaires.
Deux collections types ont été créés dans Strapi (en plus de User présent nativement): Comment et Article.
Les collections types sont modélisés de la façon suivante :
-
Article
title
: Text (Short text), requisslug
: UID, unique, basé surtitle
, requiscontent
: Rich Text, requiscoverImage
: Media (single media)status
: Enumeration présente nativement dans StrapiauthorName
: Text (Short text), requispublishedAt
: DateTime présente nativement sur Strapiusers_permissions_user
: Relation Many-to-One versUser
comments
: Relation One-to-Many versComment
-
Comment
content
: Text (Long text), requisauthorName
: Text (Short text), requisarticle
: Relation Many-to-One versArticle
users_permissions_user
: Relation Many-to-One versUser
Deux rôles sont nativement présents dans strapi : Authenticated (pas de permissions spécifiques enregistrées) et Public pour lequel quelques permissions configurées :
Articles : `find`, `findOne`
Commentaires : `create`, `find`, `findOne`
Le rôle Author a également été créé avec les permissions configurées suivantes :
Articles : `create`, `delete`, `update`, `find`, `findOne`
Commentaires : `create`, `find`, `findOne`
Une policy is-owner
a été créée pour restreindre l'auteur à pouvoir modifier ou supprimer uniquement ses propres articles. Dans strapi v5, la policy de vérification d'authentification est nativement géré. Une policy is-authenticated
a été créé quand même pour plus de sécurité.
-
Page d’accueil
- Affiche tous les articles publiés sous forme de grille.
- Chaque carte contient :
coverImage
(vignette)title
authorName
publishedAt
- Chaque carte renvoie vers la page détail de l’article (
/[slug]
).
-
Page Article
- Affiche :
coverImage
title
author.name
publishedAt
content
(HTML via Rich Text)
- Liste des commentaires existants.
- Formulaire de commentaire :
- Champs : nom + contenu
- POST vers
/api/comments
- Affiche :
# Installer les dépendances
cd monblog-strapi
npm install
# Démarrer Strapi en mode développement
npm run develop
# Installer les dépendances
cd monblog-frontend
npm install
# Démarrer le serveur Next.js en mode développement
npm run develop