Refactor storage access control to use dynamic public prefixes sourced from `getAllStoragePublicPrefixes()` instead of a hardcoded `blog` check. Each module can now declare its own public storage prefixes via `defineModule()` storagePublicPrefixes, making the system extensible without modifying the core handler. Also adds a `posts` path handler requiring admin access for private post types, removes the deprecated `version` API endpoint and its rate-limit exemption, and minor whitespace/comment cleanup.
2.6 KiB
Module Posts
Types de contenus configurables via variables d'environnement. Chaque projet déclare ses propres types (blogue, CVE, emploi, événement...) avec les champs dont il a besoin, sans toucher au code.
Configuration
Copier les variables de .env.example dans votre .env.
Si aucun label n'est fourni (ZEN_MODULE_POSTS_TYPES=blogue), le nom affiché sera la clé avec la première lettre en majuscule.
Types de champs
| Type | Syntaxe .env |
Description |
|---|---|---|
title |
nom:title |
Champ texte principal, génère le slug automatiquement |
slug |
nom:slug |
Slug unique par type, pré-rempli depuis le titre |
text |
nom:text |
Zone de texte libre |
markdown |
nom:markdown |
Éditeur Markdown avec prévisualisation |
date |
nom:date |
Sélecteur de date (YYYY-MM-DD) |
datetime |
nom:datetime |
Date et heure (ISO 8601, UTC) |
color |
nom:color |
Sélecteur de couleur, stocke un code hex #rrggbb |
category |
nom:category |
Menu déroulant lié à la table des catégories |
image |
nom:image |
Upload d'image vers le stockage Zen |
relation |
nom:relation:type_cible |
Sélection multiple vers des posts d'un autre type |
Chaque type doit avoir au moins un champ title et un champ slug.
Si un type utilise le champ image, configurer le stockage Zen dans le .env principal : ZEN_STORAGE_REGION, ZEN_STORAGE_ACCESS_KEY, ZEN_STORAGE_SECRET_KEY, ZEN_STORAGE_BUCKET.
Accès public aux images
Par défaut, les images d'un type nécessitent une session authentifiée. Pour les rendre accessibles publiquement (ex. images de blogue affichées sur le site) :
ZEN_MODULE_POSTS_TYPE_BLOGUE_PUBLIC=true
Les images sont stockées sous posts/{type}/{id}/{filename} et servies via /zen/api/storage/posts/{type}/.... L'accès public est déclaré dans le module. Aucune variable d'environnement globale n'est nécessaire.
Base de données
Les tables sont créées automatiquement avec npx zen-db init.
Interface d'administration
| Page | URL |
|---|---|
| Liste des posts | /admin/posts/{type}/list |
| Créer un post | /admin/posts/{type}/new |
| Modifier un post | /admin/posts/{type}/edit/{id} |
| Liste des catégories | /admin/posts/{type}/categories |
Documentation
- API publique — endpoints, paramètres, réponses JSON
- API d'administration — routes authentifiées
- Intégration Next.js — liste, détail, SEO
- Usage programmatique —
upsertPost, cron jobs, imports