feat: extend user role access to include ADMIN for fetching users and route access

This commit is contained in:
2025-10-25 16:17:00 +02:00
parent d2790f9877
commit 35d3cae45d
2 changed files with 36 additions and 32 deletions

View File

@@ -110,7 +110,7 @@ export default function AdminPage() {
}, [session, status, router]);
useEffect(() => {
if (session?.user?.role === 'SUPER_ADMIN') {
if (session?.user?.role === 'SUPER_ADMIN' || session?.user?.role === 'ADMIN') {
fetchUsers();
}
}, [session]);
@@ -508,37 +508,41 @@ export default function AdminPage() {
<TableCell>{userMap[userId]?.name}</TableCell>
<TableCell>{formatHours(total)}</TableCell>
<TableCell>
{userMap[userId]?.role === 'SUPER_ADMIN' ? (
'Super Admin'
{isSuperAdmin ? (
userMap[userId]?.role === 'SUPER_ADMIN' ? (
'Super Admin'
) : (
<>
<Button
onClick={() => {
setSelectedUser({
id: userId,
name: userMap[userId]?.name,
});
setForceDelete(false);
setDialogOpen(true);
}}
variant="destructive"
className="mr-2"
>
Supprimer
</Button>
<Button
onClick={() => {
setSelectedUserForReset({
id: userId,
name: userMap[userId]?.name,
});
setResetPasswordDialog(true);
}}
variant="outline"
>
Réinitialiser le mot de passe
</Button>
</>
)
) : (
<>
<Button
onClick={() => {
setSelectedUser({
id: userId,
name: userMap[userId]?.name,
});
setForceDelete(false);
setDialogOpen(true);
}}
variant="destructive"
className="mr-2"
>
Supprimer
</Button>
<Button
onClick={() => {
setSelectedUserForReset({
id: userId,
name: userMap[userId]?.name,
});
setResetPasswordDialog(true);
}}
variant="outline"
>
Réinitialiser le mot de passe
</Button>
</>
userMap[userId]?.role === 'SUPER_ADMIN' ? 'Gestionnaire' : userMap[userId]?.role === 'ADMIN' ? 'Bureau' : 'Membre'
)}
</TableCell>
</TableRow>

View File

@@ -7,7 +7,7 @@ export const dynamic = 'force-dynamic';
export async function GET(request: NextRequest) {
const session = await getServerSession(authOptions);
if (!session || session.user.role !== 'SUPER_ADMIN') {
if (!session || (session.user.role !== 'ADMIN' && session.user.role !== 'SUPER_ADMIN')) {
return NextResponse.json({ error: 'Accès refusé' }, { status: 403 });
}