52 lines
3.7 KiB
JavaScript
Executable File
52 lines
3.7 KiB
JavaScript
Executable File
import Link from "next/link";
|
|
import { getSession } from "@/lib/auth";
|
|
import { can } from "@/lib/rbac";
|
|
|
|
export default async function ProtectedLayout({ children }) {
|
|
const session = await getSession();
|
|
if (!session) {
|
|
return (
|
|
<html><body><script>location.replace('/login');</script></body></html>
|
|
);
|
|
}
|
|
const { user } = session;
|
|
|
|
return (
|
|
<section className="mx-auto max-w-7xl p-4 grid grid-cols-12 gap-6">
|
|
<aside className="col-span-12 lg:col-span-3 xl:col-span-3">
|
|
<div className="rounded-3xl p-4 border bg-white/70">
|
|
<div className="text-sm mb-3">RBAC: <b>{user.role}</b></div>
|
|
<nav className="space-y-2">
|
|
<Link className="block rounded-xl px-4 py-2 bg-white/60 hover:bg-white" href="/dashboard">แดชบอร์ด</Link>
|
|
<Link className="block rounded-xl px-4 py-2 bg-white/60 hover:bg-white" href="/drawings">Drawings</Link>
|
|
<Link className="block rounded-xl px-4 py-2 bg-white/60 hover:bg-white" href="/rfas">RFAs</Link>
|
|
<Link className="block rounded-xl px-4 py-2 bg-white/60 hover:bg-white" href="/transmittals">Transmittals</Link>
|
|
<Link className="block rounded-xl px-4 py-2 bg-white/60 hover:bg-white" href="/correspondences">Correspondences</Link>
|
|
<Link className="block rounded-xl px-4 py-2 bg-white/60 hover:bg-white" href="/contracts-volumes">Contracts & Volumes</Link>
|
|
<Link className="block rounded-xl px-4 py-2 bg-white/60 hover:bg-white" href="/reports">Reports</Link>
|
|
{can(user, 'workflow:view') && <Link className="block rounded-xl px-4 py-2 bg-white/60 hover:bg-white" href="/workflow">Workflow (n8n)</Link>}
|
|
{can(user, 'health:view') && <Link className="block rounded-xl px-4 py-2 bg-white/60 hover:bg-white" href="/health">Health</Link>}
|
|
{can(user, 'users:manage') && <Link className="block rounded-xl px-4 py-2 bg-white/60 hover:bg-white" href="/users">ผู้ใช้/บทบาท</Link>}
|
|
</nav>
|
|
</div>
|
|
</aside>
|
|
|
|
<main className="col-span-12 lg:col-span-9 xl:col-span-9 space-y-6">
|
|
{/* ปุ่ม System + Quick Actions เบื้องต้น */}
|
|
<div className="flex items-center gap-2">
|
|
<div className="text-lg font-semibold flex-1">Document Management System — LCP3 Phase 3</div>
|
|
{can(user, 'admin:view') && <a className="px-3 py-2 rounded-xl text-white" style={{background:'#0D5C75'}} href="/admin">Admin</a>}
|
|
{can(user, 'users:manage') && <a className="px-3 py-2 rounded-xl text-white" style={{background:'#0D5C75'}} href="/users">ผู้ใช้/บทบาท</a>}
|
|
{can(user, 'health:view') && <a className="px-3 py-2 rounded-xl text-white" style={{background:'#0D5C75'}} href="/health">Health</a>}
|
|
{can(user, 'workflow:view') && <a className="px-3 py-2 rounded-xl text-white" style={{background:'#0D5C75'}} href="/workflow">Workflow</a>}
|
|
{can(user, 'rfa:create') && <a className="px-3 py-2 rounded-xl text-white" style={{background:'#0D5C75'}} href="/rfas/new">+ RFA</a>}
|
|
{can(user, 'drawing:upload') && <a className="px-3 py-2 rounded-xl text-white" style={{background:'#0D5C75'}} href="/drawings/upload">+ Upload Drawing</a>}
|
|
{can(user, 'transmittal:create') && <a className="px-3 py-2 rounded-xl text-white" style={{background:'#0D5C75'}} href="/transmittals/new">+ Transmittal</a>}
|
|
{can(user, 'correspondence:create') && <a className="px-3 py-2 rounded-xl text-white" style={{background:'#0D5C75'}} href="/correspondences/new">+ หนังสือสื่อสาร</a>}
|
|
</div>
|
|
{children}
|
|
</main>
|
|
</section>
|
|
);
|
|
}
|