## Bug Fixes ### Note Card Actions - Fix broken size change functionality (missing state declaration) - Implement React 19 useOptimistic for instant UI feedback - Add startTransition for non-blocking updates - Ensure smooth animations without page refresh - All note actions now work: pin, archive, color, size, checklist ### Markdown LaTeX Rendering - Add remark-math and rehype-katex plugins - Support inline equations with dollar sign syntax - Support block equations with double dollar sign syntax - Import KaTeX CSS for proper styling - Equations now render correctly instead of showing raw LaTeX ## Technical Details - Replace undefined currentNote references with optimistic state - Add optimistic updates before server actions for instant feedback - Use router.refresh() in transitions for smart cache invalidation - Install remark-math, rehype-katex, and katex packages ## Testing - Build passes successfully with no TypeScript errors - Dev server hot-reloads changes correctly
3.4 KiB
3.4 KiB
PRD - Authentification Avancée & Administration
1. Contexte & Objectifs
L'application Memento dispose actuellement d'une authentification basique. Pour un usage multi-utilisateurs ou privé/familial sécurisé, il est nécessaire d'introduire des rôles (Admin vs Utilisateur standard) et de permettre la gestion des comptes.
Objectifs :
- Permettre à un Administrateur de gérer les utilisateurs (création manuelle, suppression).
- Permettre à tout utilisateur de modifier ses informations personnelles (nom, mot de passe).
- Sécuriser l'application en introduisant des rôles.
2. Spécifications Fonctionnelles
2.1 Gestion des Rôles (Backend)
- Modèle User : Ajouter un champ
roleavec deux valeurs possibles :USER(défaut) etADMIN. - NextAuth : Le rôle de l'utilisateur doit être disponible dans la session (via le token JWT) pour être vérifié côté client et serveur.
2.2 Dashboard Admin (/admin)
Accès : Restreint aux utilisateurs ayant le rôle ADMIN.
Fonctionnalités :
- Liste des utilisateurs :
- Tableau affichant : Nom, Email, Rôle, Date de création.
- Actions par ligne : "Supprimer", "Promouvoir Admin / Rétrograder".
- Création d'utilisateur :
- Un bouton "Nouvel Utilisateur" ouvre une modale ou un formulaire.
- Champs : Nom, Email, Mot de passe, Rôle.
- Validation : Email unique, mot de passe min 6 caractères.
2.3 Profil Utilisateur (/settings/profile)
Accès : Tout utilisateur connecté. Fonctionnalités :
- Modifier le profil :
- Changer le nom d'affichage.
- Sécurité :
- Changer le mot de passe (nécessite l'ancien mot de passe pour validation).
3. Spécifications Techniques
3.1 Base de Données (Prisma)
Modifier schema.prisma :
model User {
// ... champs existants
role String @default("USER") // ou Enum si SQLite le supporte bien (sinon String géré par app)
}
3.2 Authentication (NextAuth v5)
- Modifier
auth.config.ts:- Ajouter
roleau typeSessionetUser. - Dans le callback
jwt, récupérer le rôle depuis la DB et le persister dans le token. - Dans le callback
session, passer le rôle du token à la session.
- Ajouter
3.3 Server Actions
Créer app/actions/admin.ts :
getUsers(): Retourne la liste (Admin only).createUser(data): Crée un user avec hash du mot de passe (Admin only).deleteUser(id): Supprime un user (Admin only).updateUserRole(id, role): Change le rôle (Admin only).
Créer app/actions/profile.ts :
updateProfile(data): Met à jour nom/email.changePassword(oldPwd, newPwd): Vérifie l'ancien hash et met à jour.
3.4 Interface Utilisateur (UI)
- Admin : Utiliser
Table,DialogetFormde Shadcn UI. - Profil : Utiliser
Card,InputetButtonde Shadcn UI. - Menu : Ajouter un lien "Admin" dans la Sidebar ou le menu utilisateur, visible uniquement si
role === 'ADMIN'.
4. Plan d'Implémentation
- Migration DB : Ajouter le champ
roleet mettre à jour Prisma. - Config Auth : Mettre à jour NextAuth pour propager le rôle.
- Backend : Implémenter les Server Actions (Admin & Profil).
- Frontend Admin : Créer la page
/adminet ses composants. - Frontend Profil : Créer la page
/settings/profile. - Sécurisation : Ajouter les vérifications de rôle dans le Middleware ou les Layouts.