feat: add user management to admin panel (add, delete, change password)

This commit is contained in:
mstfyldz
2026-06-05 17:33:00 +03:00
parent 9d228b7c0a
commit 8fa63d0b25
3 changed files with 255 additions and 1 deletions
+68
View File
@@ -0,0 +1,68 @@
'use server';
import { prisma } from '@/lib/db';
import { getSession } from '@/lib/auth';
import { redirect } from 'next/navigation';
import { revalidatePath } from 'next/cache';
import bcrypt from 'bcryptjs';
async function requireAuth() {
const session = await getSession();
if (!session) redirect('/admin/login');
}
export async function createUser(formData: FormData) {
await requireAuth();
const username = formData.get('username') as string;
const password = formData.get('password') as string;
const confirmPassword = formData.get('confirmPassword') as string;
if (!username || !password) return;
if (password !== confirmPassword) return;
if (password.length < 6) return;
const exists = await prisma.user.findUnique({ where: { username } });
if (exists) return;
const hashed = await bcrypt.hash(password, 10);
await prisma.user.create({
data: { username, password: hashed },
});
revalidatePath('/admin/users');
}
export async function deleteUser(formData: FormData) {
await requireAuth();
const id = formData.get('id') as string;
if (!id) return;
// En az 1 kullanıcı kalsın
const count = await prisma.user.count();
if (count <= 1) return;
await prisma.user.delete({ where: { id } });
revalidatePath('/admin/users');
}
export async function changePassword(formData: FormData) {
await requireAuth();
const userId = formData.get('userId') as string;
const newPassword = formData.get('newPassword') as string;
const confirmPassword = formData.get('confirmPassword') as string;
if (!userId || !newPassword) return;
if (newPassword !== confirmPassword) return;
if (newPassword.length < 6) return;
const hashed = await bcrypt.hash(newPassword, 10);
await prisma.user.update({
where: { id: userId },
data: { password: hashed },
});
revalidatePath('/admin/users');
}