Checkpoint: Restreindre les droits des formateurs : masquer les boutons de création/modification/suppression des apprenants pour les formateurs (seuls les administrateurs peuvent les voir)

This commit is contained in:
Manus
2026-01-23 11:49:46 -05:00
parent 953677467a
commit 3c6f3eb741
2 changed files with 39 additions and 29 deletions

View File

@@ -12,8 +12,11 @@ import { useState, useMemo } from "react";
import { useLocation } from "wouter"; import { useLocation } from "wouter";
import { toast } from "sonner"; import { toast } from "sonner";
import { Skeleton } from "@/components/ui/skeleton"; import { Skeleton } from "@/components/ui/skeleton";
import { useAuth } from "@/_core/hooks/useAuth";
export default function AdminApprenants() { export default function AdminApprenants() {
const { user } = useAuth();
const isAdmin = user?.role === 'admin';
const [, setLocation] = useLocation(); const [, setLocation] = useLocation();
const [open, setOpen] = useState(false); const [open, setOpen] = useState(false);
const [editingId, setEditingId] = useState<number | null>(null); const [editingId, setEditingId] = useState<number | null>(null);
@@ -123,18 +126,19 @@ export default function AdminApprenants() {
Gérez les apprenants et leurs informations Gérez les apprenants et leurs informations
</p> </p>
</div> </div>
<Dialog open={open} onOpenChange={(isOpen) => { {isAdmin && (
setOpen(isOpen); <Dialog open={open} onOpenChange={(isOpen) => {
if (!isOpen) resetForm(); setOpen(isOpen);
}}> if (!isOpen) resetForm();
<DialogTrigger asChild> }}>
<Button> <DialogTrigger asChild>
<Plus className="w-4 h-4 mr-2" /> <Button>
Nouvel apprenant <Plus className="w-4 h-4 mr-2" />
</Button> Nouvel apprenant
</DialogTrigger> </Button>
<DialogContent className="sm:max-w-[500px]"> </DialogTrigger>
<form onSubmit={handleSubmit}> <DialogContent className="sm:max-w-[500px]">
<form onSubmit={handleSubmit}>
<DialogHeader> <DialogHeader>
<DialogTitle> <DialogTitle>
{editingId ? "Modifier l'apprenant" : "Nouvel apprenant"} {editingId ? "Modifier l'apprenant" : "Nouvel apprenant"}
@@ -209,9 +213,10 @@ export default function AdminApprenants() {
{editingId ? "Mettre à jour" : "Créer"} {editingId ? "Mettre à jour" : "Créer"}
</Button> </Button>
</DialogFooter> </DialogFooter>
</form> </form>
</DialogContent> </DialogContent>
</Dialog> </Dialog>
)}
</div> </div>
{/* Filtres et recherche */} {/* Filtres et recherche */}
@@ -324,20 +329,24 @@ export default function AdminApprenants() {
> >
<Eye className="w-4 h-4 text-blue-600" /> <Eye className="w-4 h-4 text-blue-600" />
</Button> </Button>
<Button {isAdmin && (
variant="ghost" <>
size="icon" <Button
onClick={() => handleEdit(apprenant)} variant="ghost"
> size="icon"
<Pencil className="w-4 h-4" /> onClick={() => handleEdit(apprenant)}
</Button> >
<Button <Pencil className="w-4 h-4" />
variant="ghost" </Button>
size="icon" <Button
onClick={() => handleDelete(apprenant.id)} variant="ghost"
> size="icon"
<Trash2 className="w-4 h-4 text-red-600" /> onClick={() => handleDelete(apprenant.id)}
</Button> >
<Trash2 className="w-4 h-4 text-red-600" />
</Button>
</>
)}
</div> </div>
</TableCell> </TableCell>
</TableRow> </TableRow>

View File

@@ -1199,3 +1199,4 @@
- [ ] Ajouter validation date fin > date début dans la boîte de dialogue de modification des séquences - [ ] Ajouter validation date fin > date début dans la boîte de dialogue de modification des séquences
- [x] Ajouter une validation frontend en temps réel dans les champs de date pour afficher un message d'erreur immédiat - [x] Ajouter une validation frontend en temps réel dans les champs de date pour afficher un message d'erreur immédiat
- [ ] Restreindre les droits des formateurs (pas de modification/suppression de formations et séquences) - [ ] Restreindre les droits des formateurs (pas de modification/suppression de formations et séquences)
- [ ] Restreindre les droits des formateurs pour qu'ils ne puissent pas créer/modifier/supprimer des apprenants