Kaynağa Gözat

added access right LANE for car line

production
PC-20260115JRSN\Administrator 8 saat önce
ebeveyn
işleme
d908f2378c
3 değiştirilmiş dosya ile 47 ekleme ve 1 silme
  1. +27
    -0
      src/app/(main)/settings/shop/layout.tsx
  2. +2
    -0
      src/authorities.ts
  3. +18
    -1
      src/components/NavigationContent/NavigationContent.tsx

+ 27
- 0
src/app/(main)/settings/shop/layout.tsx Dosyayı Görüntüle

@@ -0,0 +1,27 @@
import { I18nProvider } from "@/i18n";
import { authOptions } from "@/config/authConfig";
import { AUTH, hasAbility } from "@/authorities";
import { getServerSession } from "next-auth";
import { redirect } from "next/navigation";

/** Route board and shop/truck lane pages: ADMIN or 車線 (TRUCK_LANE). */
export default async function ShopSettingsLayout({
children,
}: {
children: React.ReactNode;
}) {
const session = await getServerSession(authOptions);
const abilities = session?.user?.abilities ?? [];
const canAccess =
hasAbility(abilities, AUTH.TRUCK_LANE) || hasAbility(abilities, AUTH.ADMIN);

if (!canAccess) {
redirect("/dashboard");
}

return (
<I18nProvider namespaces={["shop", "navigation", "common"]}>
{children}
</I18nProvider>
);
}

+ 2
- 0
src/authorities.ts Dosyayı Görüntüle

@@ -27,6 +27,8 @@ export const AUTH = {
REPORT_MGMT: "REPORT_MGMT",
/** FP-MTMS Version Checklist | Functions Ref. No. 67 | v1.0.0 | 2026-08-13 — Manual M18 sync page (/m18Syn): ADMIN or this ability */
M18_SYNC: "M18_SYNC",
/** Route board (/settings/shop/board): ADMIN or this ability (DB name: 車線) */
TRUCK_LANE: "TRUCK_LANE",
} as const;

/**


+ 18
- 1
src/components/NavigationContent/NavigationContent.tsx Dosyayı Görüntüle

@@ -303,7 +303,7 @@ const NavigationContent: React.FC = () => {
icon: <Settings />,
labelKey: "nav.settings",
path: "",
requiredAbility: [AUTH.VIEW_USER, AUTH.ADMIN],
requiredAbility: [AUTH.VIEW_USER, AUTH.ADMIN, AUTH.TRUCK_LANE],
children: [
{
id: "nav.settings.user",
@@ -325,78 +325,91 @@ const NavigationContent: React.FC = () => {
icon: <Category />,
labelKey: "nav.settings.items",
path: "/settings/items",
requiredAbility: [AUTH.VIEW_USER, AUTH.ADMIN],
},
{
id: "nav.settings.itemDefaultShelfLife",
icon: <EventAvailable />,
labelKey: "nav.settings.itemDefaultShelfLife",
path: "/settings/itemDefaultShelfLife",
requiredAbility: [AUTH.VIEW_USER, AUTH.ADMIN],
},
{
id: "nav.settings.equipment",
icon: <Build />,
labelKey: "nav.settings.equipment",
path: "/settings/equipment",
requiredAbility: [AUTH.VIEW_USER, AUTH.ADMIN],
},
{
id: "nav.settings.warehouse",
icon: <Warehouse />,
labelKey: "nav.settings.warehouse",
path: "/settings/warehouse",
requiredAbility: [AUTH.VIEW_USER, AUTH.ADMIN],
},
{
id: "nav.settings.printer",
icon: <Print />,
labelKey: "nav.settings.printer",
path: "/settings/printer",
requiredAbility: [AUTH.VIEW_USER, AUTH.ADMIN],
},
{
id: "nav.settings.priceInquiry",
icon: <Assessment />,
labelKey: "nav.settings.priceInquiry",
path: "/settings/itemPrice",
requiredAbility: [AUTH.VIEW_USER, AUTH.ADMIN],
},
{
id: "nav.settings.qcItem",
icon: <VerifiedUser />,
labelKey: "nav.settings.qcItem",
path: "/settings/qcItem",
requiredAbility: [AUTH.VIEW_USER, AUTH.ADMIN],
},
{
id: "nav.settings.qcCategory",
icon: <Label />,
labelKey: "nav.settings.qcCategory",
path: "/settings/qcCategory",
requiredAbility: [AUTH.VIEW_USER, AUTH.ADMIN],
},
{
id: "nav.settings.qcItemAll",
icon: <Checklist />,
labelKey: "nav.settings.qcItemAll",
path: "/settings/qcItemAll",
requiredAbility: [AUTH.VIEW_USER, AUTH.ADMIN],
},
{
id: "nav.settings.shopAndTruck",
icon: <Storefront />,
labelKey: "nav.settings.shopAndTruck",
path: "/settings/shop/board",
requiredAbility: [AUTH.TRUCK_LANE, AUTH.ADMIN],
},
{
id: "nav.settings.deliveryOrderFloor",
icon: <Layers />,
labelKey: "nav.settings.deliveryOrderFloor",
path: "/settings/deliveryOrderFloor",
requiredAbility: [AUTH.VIEW_USER, AUTH.ADMIN],
},
{
id: "nav.settings.demandForecast",
icon: <TrendingUp />,
labelKey: "nav.settings.demandForecast",
path: "/settings/rss",
requiredAbility: [AUTH.VIEW_USER, AUTH.ADMIN],
},
{
id: "nav.settings.bomWeighting",
icon: <ViewModule />,
labelKey: "nav.settings.bomWeighting",
path: "/settings/bomWeighting",
requiredAbility: [AUTH.VIEW_USER, AUTH.ADMIN],
},
{
id: "nav.settings.masterDataIssues",
@@ -410,24 +423,28 @@ const NavigationContent: React.FC = () => {
icon: <QrCodeIcon />,
labelKey: "nav.settings.qrCodeHandle",
path: "/settings/qrCodeHandle",
requiredAbility: [AUTH.VIEW_USER, AUTH.ADMIN],
},
{
id: "nav.settings.importTesting",
icon: <Science />,
labelKey: "nav.settings.importTesting",
path: "/settings/m18ImportTesting",
requiredAbility: [AUTH.VIEW_USER, AUTH.ADMIN],
},
{
id: "nav.settings.importExcel",
icon: <UploadFile />,
labelKey: "nav.settings.importExcel",
path: "/settings/importExcel",
requiredAbility: [AUTH.VIEW_USER, AUTH.ADMIN],
},
{
id: "nav.settings.importBom",
icon: <UploadFile />,
labelKey: "nav.settings.importBom",
path: "/settings/importBom",
requiredAbility: [AUTH.VIEW_USER, AUTH.ADMIN],
},
],
},


Yükleniyor…
İptal
Kaydet