Files
alla-allaos-fullstack/src/config/nav-config.ts
phaichayon 5c28080e9b task-k.1
2026-06-22 20:07:51 +07:00

196 lines
5.4 KiB
TypeScript

import { NavGroup } from "@/types";
/**
* Navigation configuration with RBAC support
*
* This configuration is used for both the sidebar navigation and Cmd+K bar.
* Items are organized into groups, each rendered with a SidebarGroupLabel.
*
* RBAC Access Control:
* Each navigation item can have an `access` property that controls visibility
* based on permissions, plans, features, roles, and organization context.
*
* Examples:
*
* 1. Require organization:
* access: { requireOrg: true }
*
* 2. Require specific permission:
* access: { requireOrg: true, permission: 'org:teams:manage' }
*
* 3. Require specific plan:
* access: { plan: 'pro' }
*
* 4. Require specific feature:
* access: { feature: 'premium_access' }
*
* 5. Require specific role:
* access: { role: 'admin' }
*
* 6. Multiple conditions (all must be true):
* access: { requireOrg: true, permission: 'org:teams:manage', plan: 'pro' }
*
* Note: The `visible` function is deprecated but still supported for backward compatibility.
* Use the `access` property for new items.
*/
export const navGroups: NavGroup[] = [
{
label: "Overview",
items: [
{
title: "Dashboard Overview",
url: "/dashboard",
icon: "dashboard",
isActive: false,
shortcut: ["d", "d"],
items: [],
},
{
title: "Workspaces",
url: "/dashboard/workspaces",
icon: "workspace",
isActive: false,
items: [],
access: { systemRole: "super_admin" },
},
{
title: "Teams",
url: "/dashboard/workspaces/team",
icon: "teams",
isActive: false,
items: [],
access: { requireOrg: true, permission: "crm.quotation.read" },
},
{
title: "Users",
url: "/dashboard/users",
icon: "teams",
shortcut: ["u", "u"],
isActive: false,
items: [],
access: { requireOrg: true, permission: "users:manage" },
},
{
title: "Kanban",
url: "/dashboard/kanban",
icon: "kanban",
shortcut: ["k", "k"],
isActive: false,
items: [],
},
],
},
{
label: "CRM",
items: [
{
title: "Dashboard",
url: "/dashboard/crm",
icon: "dashboard",
isActive: false,
items: [],
access: { requireOrg: true, permission: "crm.dashboard.read" },
},
{
title: "ลูกค้า",
url: "/dashboard/crm/customers",
icon: "teams",
isActive: false,
items: [],
access: { requireOrg: true, permission: "crm.customer.read" },
},
{
title: "ลีด",
url: "/dashboard/crm/leads",
icon: "forms",
isActive: false,
items: [],
access: { requireOrg: true, permission: "crm.lead.read" },
},
{
title: "โอกาสขาย",
url: "/dashboard/crm/enquiries",
icon: "forms",
isActive: false,
items: [],
access: { requireOrg: true, permission: "crm.enquiry.read" },
},
{
title: "ใบเสนอราคา",
url: "/dashboard/crm/quotations",
icon: "post",
isActive: false,
items: [],
access: { requireOrg: true, role: "admin" },
},
{
title: "อนุมัติเอกสาร",
url: "/dashboard/crm/approvals",
icon: "checks",
isActive: false,
items: [],
access: { requireOrg: true, permission: "crm.approval.read" },
},
{
title: "Reports",
url: "/dashboard/crm/reports",
icon: "dashboard",
isActive: false,
items: [],
access: { requireOrg: true, permission: "crm.report.read" },
},
{
title: "ตั้งค่า CRM",
url: "/dashboard/crm/settings/master-options",
icon: "settings",
isActive: false,
access: { requireOrg: true, permission: "crm.user_role_assignment.read" },
items: [
{
title: "Roles & Permissions",
url: "/dashboard/crm/settings/roles",
access: { requireOrg: true, permission: "crm.role.read" },
},
{
title: "User Role Assignments",
url: "/dashboard/crm/settings/user-role-assignments",
access: {
requireOrg: true,
permission: "crm.user_role_assignment.read",
},
},
{
title: "Master Options",
url: "/dashboard/crm/settings/master-options",
access: { requireOrg: true, permission: "crm.master_option.read" },
},
{
title: "Document Sequences",
url: "/dashboard/crm/settings/document-sequences",
access: {
requireOrg: true,
permission: "crm.document_sequence.read",
},
},
{
title: "Approval Workflows",
url: "/dashboard/crm/settings/approval-workflows",
access: {
requireOrg: true,
permission: "crm.approval.workflow.read",
},
},
{
title: "Templates",
url: "/dashboard/crm/settings/templates",
access: {
requireOrg: true,
permission: "crm.document_template.read",
},
},
],
},
],
},
];