"use client"; import { useState } from "react"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Checkbox } from "@/components/ui/checkbox"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger, DialogFooter, } from "@/components/ui/dialog"; import { ChevronDown, ChevronRight, Plus, Trash2 } from "lucide-react"; import { toTitleCase } from "@/lib/utils"; import { useApi } from "@/hooks/use-api"; type Action = "create" | "read" | "update" | "delete"; interface Permission { resource: string; actions: Action[]; } interface Role { name: string; permissions: Permission[]; } // Sample data const initialRoles: Role[] = [ { name: "Admin", permissions: [ { resource: "users", actions: ["create", "read", "update", "delete"], }, { resource: "events", actions: ["create", "read", "update", "delete"], }, { resource: "blogs", actions: ["create", "read", "update", "delete"], }, ], }, { name: "Editor", permissions: [ { resource: "users", actions: ["read"] }, { resource: "events", actions: ["create", "read", "update"] }, { resource: "blogs", actions: ["create", "read", "update"] }, ], }, ]; interface PermissionsGrouped { resource: string; actions: string[]; } export default function RolesAndPermissions() { const [roles, setRoles] = useState(initialRoles); const [newRoleName, setNewRoleName] = useState(""); const [isDialogOpen, setIsDialogOpen] = useState(false); const { data: permissions } = useApi( "/permissions/grouped", {}, true, ); const addNewRole = () => { if (newRoleName.trim() === "") return; const newRole: Role = { name: newRoleName.trim(), permissions: [ { resource: "users", actions: [] }, { resource: "events", actions: [] }, { resource: "blogs", actions: [] }, ], }; setRoles([...roles, newRole]); setNewRoleName(""); setIsDialogOpen(false); }; const deleteRole = (index: number) => { const updatedRoles = roles.filter((_, i) => i !== index); setRoles(updatedRoles); }; return (

Rôles et Permissions

Nouveau rôle
setNewRoleName(e.target.value)} />
{roles.map((role, index) => ( deleteRole(index)} /> ))}
); } interface RoleCardProps { role: Role; onDelete: () => void; } function RoleCard({ role, onDelete }: RoleCardProps) { return ( {role.name} {role.permissions.map((permission) => ( ))} ); } interface ResourceSectionProps { resource: string; actions: Action[]; } function ResourceSection({ resource, actions }: ResourceSectionProps) { const [isExpanded, setIsExpanded] = useState(false); return (
{isExpanded && (
{actions.map((action) => (
))}
)}
); }