Repository Public
1// Auteur : Simon-Pierre Boucher — contact@spboucher.ai2// /admin/equipe — gestion des accès du panel. Tout admin peut changer SON3// mot de passe ; la gestion des comptes (création, rôles, activation,4// réinitialisation) est réservée au super administrateur — et l'API le5// revérifie côté serveur.6import { redirect } from "next/navigation";7import { getAdminSession, isSuperAdmin, parseRoles } from "@/lib/comms/admin-auth";8import { listAdmins } from "@/lib/comms/db";9import { ADMIN_ROLES } from "@/lib/comms/categories";10import { ChangeMyPassword, CreateAdminForm, TeamMemberRow } from "./TeamClient";1112export const dynamic = "force-dynamic";1314export default async function EquipePage() {15 const session = await getAdminSession();16 if (!session) redirect("/admin/connexion");17 const superAdmin = isSuperAdmin(session);18 const admins = listAdmins();1920 return (21 <>22 <p className="kicker">Équipe & accès</p>23 <h1 className="gk-display mt-2 text-[clamp(22px,3vw,30px)] font-bold tracking-[-0.03em]">24 Comptes du panel25 </h1>26 <p className="mt-3 max-w-2xl text-[13.5px] text-ink-2">27 Les rôles limitent ce que chaque personne voit : investisseurs, légal28 et sécurité ne sont visibles que des rôles dédiés (et du super29 administrateur). Le niveau « restreinte » d'une demande resserre30 encore l'accès.31 </p>3233 <section className="gk-card mt-8 max-w-xl p-6 !shadow-none">34 <p className="kicker">Mon mot de passe</p>35 <ChangeMyPassword />36 </section>3738 {superAdmin ? (39 <>40 <div className="sec-head mt-12">41 <p className="kicker">Membres ({admins.length})</p>42 <span className="sec-index">super admin requis</span>43 </div>44 <div className="mt-5 flex flex-col gap-4">45 {admins.map((a) => (46 <TeamMemberRow47 key={a.id}48 admin={{49 id: a.id,50 username: a.username,51 displayName: a.display_name,52 email: a.email,53 roles: parseRoles(a.roles),54 active: !!a.active,55 lastLogin: a.last_login,56 }}57 self={a.id === session.id}58 />59 ))}60 </div>6162 <div className="sec-head mt-12">63 <p className="kicker">Ajouter un compte</p>64 <span className="sec-index">{Object.keys(ADMIN_ROLES).length} rôles</span>65 </div>66 <div className="gk-card mt-5 max-w-2xl p-6 !shadow-none">67 <CreateAdminForm />68 </div>69 </>70 ) : (71 <p className="gk-mono mt-10 text-[11.5px] text-ink-3">72 La gestion des comptes est réservée au super administrateur.73 </p>74 )}75 </>76 );77}78