added admin system
This commit is contained in:
@@ -3,6 +3,8 @@ import db from '@/lib/db';
|
||||
import { dataset_entry } from '@/lib/model/dataset_entry';
|
||||
import { eq } from 'drizzle-orm';
|
||||
import AudioPlayer from '@/components/AudioPlayer';
|
||||
import { requireAdmin } from '@/lib/auth';
|
||||
import { redirect } from 'next/navigation';
|
||||
|
||||
interface DatasetEntryPageProps {
|
||||
params: {
|
||||
@@ -12,6 +14,16 @@ interface DatasetEntryPageProps {
|
||||
}
|
||||
|
||||
export default async function DatasetEntryPage({ params }: DatasetEntryPageProps) {
|
||||
const result = await requireAdmin();
|
||||
|
||||
if (!result.authenticated) {
|
||||
redirect("/user/sign-in");
|
||||
}
|
||||
|
||||
if (!result.admin) {
|
||||
redirect("/");
|
||||
}
|
||||
|
||||
const { id: datasetId, entryId } = await params;
|
||||
const datasetIdNum = parseInt(datasetId, 10);
|
||||
const entryIdNum = parseInt(entryId, 10);
|
||||
|
||||
@@ -6,6 +6,8 @@ import EditableDatasetHeader from '@/components/EditableDatasetHeader';
|
||||
import DatasetEntriesList from '@/components/DatasetEntriesList';
|
||||
import UploadDatasetEntriesModal from '@/components/UploadDatasetEntriesModal';
|
||||
import RemoveAllEntriesButton from '@/components/RemoveAllEntriesButton';
|
||||
import { requireAdmin } from '@/lib/auth';
|
||||
import { redirect } from 'next/navigation';
|
||||
|
||||
interface DatasetPageProps {
|
||||
params: {
|
||||
@@ -14,6 +16,16 @@ interface DatasetPageProps {
|
||||
}
|
||||
|
||||
export default async function DatasetPage({ params }: DatasetPageProps) {
|
||||
const result = await requireAdmin();
|
||||
|
||||
if (!result.authenticated) {
|
||||
redirect("/user/sign-in");
|
||||
}
|
||||
|
||||
if (!result.admin) {
|
||||
redirect("/");
|
||||
}
|
||||
|
||||
const {id} = await params;
|
||||
const datasetId = parseInt(id, 10);
|
||||
|
||||
|
||||
@@ -1,22 +1,39 @@
|
||||
import DatasetsList from "@/components/DatasetsList";
|
||||
import CreateDatasetModal from "@/components/CreateDatasetModal";
|
||||
import { auth } from "@/lib/auth";
|
||||
import { headers } from "next/headers";
|
||||
import { requireAdmin } from "@/lib/auth";
|
||||
import { redirect } from "next/navigation";
|
||||
import Link from "next/link";
|
||||
|
||||
export default async function AdminPage() {
|
||||
const session = await auth.api.getSession({
|
||||
headers: await headers()
|
||||
})
|
||||
const result = await requireAdmin();
|
||||
|
||||
if(!session) {
|
||||
redirect("/user/sign-in")
|
||||
if (!result.authenticated) {
|
||||
redirect("/user/sign-in");
|
||||
}
|
||||
|
||||
if (!result.admin) {
|
||||
redirect("/");
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
|
||||
<div className="mb-8">
|
||||
<h1 className="text-3xl font-bold mb-4">Admin Panel</h1>
|
||||
<div className="flex gap-4">
|
||||
<Link
|
||||
href="/admin/users"
|
||||
className="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600"
|
||||
>
|
||||
Manage Users
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="mt-8">
|
||||
<h2 className="text-2xl font-bold mb-4">Datasets</h2>
|
||||
<CreateDatasetModal />
|
||||
<DatasetsList />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
39
src/app/admin/users/page.tsx
Normal file
39
src/app/admin/users/page.tsx
Normal file
@@ -0,0 +1,39 @@
|
||||
import Link from "next/link";
|
||||
import UsersList from "@/components/UsersList";
|
||||
import { requireAdmin } from "@/lib/auth";
|
||||
import { redirect } from "next/navigation";
|
||||
import { getAllUsers } from "@/app/actions/manage-users";
|
||||
|
||||
export default async function UsersPage() {
|
||||
const result = await requireAdmin();
|
||||
|
||||
if (!result.authenticated) {
|
||||
redirect("/user/sign-in");
|
||||
}
|
||||
|
||||
if (!result.admin) {
|
||||
redirect("/");
|
||||
}
|
||||
|
||||
const users = await getAllUsers();
|
||||
|
||||
return (
|
||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
|
||||
<div className="mb-6">
|
||||
<Link
|
||||
href="/admin"
|
||||
className="text-blue-500 hover:text-blue-600 mb-4 inline-block"
|
||||
>
|
||||
← Back to Admin
|
||||
</Link>
|
||||
<h1 className="text-3xl font-bold">User Management</h1>
|
||||
</div>
|
||||
|
||||
<div className="bg-white rounded-lg shadow">
|
||||
<div className="p-6">
|
||||
<UsersList users={users} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user