## 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
76 lines
3.4 KiB
Markdown
76 lines
3.4 KiB
Markdown
# 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 `role` avec deux valeurs possibles : `USER` (défaut) et `ADMIN`.
|
|
- **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 :**
|
|
1. **Liste des utilisateurs** :
|
|
- Tableau affichant : Nom, Email, Rôle, Date de création.
|
|
- Actions par ligne : "Supprimer", "Promouvoir Admin / Rétrograder".
|
|
2. **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 :**
|
|
1. **Modifier le profil** :
|
|
- Changer le nom d'affichage.
|
|
2. **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` :
|
|
```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 `role` au type `Session` et `User`.
|
|
- 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.
|
|
|
|
### 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`, `Dialog` et `Form` de Shadcn UI.
|
|
- **Profil** : Utiliser `Card`, `Input` et `Button` de Shadcn UI.
|
|
- **Menu** : Ajouter un lien "Admin" dans la Sidebar ou le menu utilisateur, visible uniquement si `role === 'ADMIN'`.
|
|
|
|
## 4. Plan d'Implémentation
|
|
1. **Migration DB** : Ajouter le champ `role` et mettre à jour Prisma.
|
|
2. **Config Auth** : Mettre à jour NextAuth pour propager le rôle.
|
|
3. **Backend** : Implémenter les Server Actions (Admin & Profil).
|
|
4. **Frontend Admin** : Créer la page `/admin` et ses composants.
|
|
5. **Frontend Profil** : Créer la page `/settings/profile`.
|
|
6. **Sécurisation** : Ajouter les vérifications de rôle dans le Middleware ou les Layouts.
|