SPB Git

Repository Public

page.tsx 2.8 KB 78 lines tsx

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&apos;une demande resserre30        encore l&apos;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
Files main
Menu

Theme