Politique de Confidentialité
1. Collecte des données
Nous collectons les données suivantes :
- Données d'authentification (via Keycloak)
- Emails et calendriers (via Microsoft Graph)
- Messages (via RocketChat)
- Tâches (via Leantime)
2. Base légale
Le traitement est basé sur :
- Votre consentement
- L'exécution d'un contrat
- L'intérêt légitime
3. Vos droits
Conformément au RGPD, vous disposez des droits suivants :
- Droit d'accès (Article 15)
- Droit de rectification (Article 16)
- Droit à l'effacement (Article 17)
- Droit à la portabilité (Article 20)
- Droit d'opposition (Article 21)
4. Contact
Pour exercer vos droits, contactez : privacy@example.com
);
}
```
#### 🔴 CRITIQUE - Implémenter les droits utilisateurs
```typescript
// app/api/gdpr/access/route.ts
import { NextResponse } from 'next/server';
import { getServerSession } from 'next-auth';
import { authOptions } from '@/app/api/auth/options';
import { prisma } from '@/lib/prisma';
export async function GET() {
const session = await getServerSession(authOptions);
if (!session?.user?.id) {
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
}
// Collecter toutes les données de l'utilisateur
const userData = {
profile: await prisma.user.findUnique({
where: { id: session.user.id },
}),
emails: await prisma.email.findMany({
where: { userId: session.user.id },
}),
calendars: await prisma.calendar.findMany({
where: { userId: session.user.id },
}),
// ... autres données
};
return NextResponse.json(userData);
}
```
```typescript
// app/api/gdpr/delete/route.ts
export async function DELETE() {
const session = await getServerSession(authOptions);
if (!session?.user?.id) {
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
}
// Supprimer toutes les données de l'utilisateur
await prisma.user.delete({
where: { id: session.user.id },
});
// Nettoyer localStorage côté client
// (nécessite une action côté client)
return NextResponse.json({ success: true });
}
```
#### 🔴 CRITIQUE - Ajouter un banner de consentement cookies
```typescript
// components/cookie-consent.tsx
'use client';
import { useState, useEffect } from 'react';
import { Button } from '@/components/ui/button';
export function CookieConsent() {
const [showBanner, setShowBanner] = useState(false);
useEffect(() => {
const consent = localStorage.getItem('cookie-consent');
if (!consent) {
setShowBanner(true);
}
}, []);
const acceptCookies = () => {
localStorage.setItem('cookie-consent', 'accepted');
localStorage.setItem('cookie-consent-date', new Date().toISOString());
setShowBanner(false);
};
const rejectCookies = () => {
localStorage.setItem('cookie-consent', 'rejected');
// Supprimer les cookies non essentiels
// ...
setShowBanner(false);
};
if (!showBanner) return null;
return (