feat(pm-panel): pm panel level gating — RequirePmPanel/HomeRoute/menu honor panels.pm (full/limited); pm-only users land directly in the PM panel
This commit is contained in:
+12
-2
@@ -101,6 +101,10 @@ function HomeRoute() {
|
|||||||
const panels = user?.panels ?? {};
|
const panels = user?.panels ?? {};
|
||||||
if (panels.inventory) return <Navigate to="/inventory" replace />;
|
if (panels.inventory) return <Navigate to="/inventory" replace />;
|
||||||
if (panels.procurement === "limited") return <RequesterHome />;
|
if (panels.procurement === "limited") return <RequesterHome />;
|
||||||
|
// فقط پنل PM: مستقیم به پنل مدیریت پروژه
|
||||||
|
if (panels.pm && !panels.inventory && !panels.procurement) {
|
||||||
|
return <Navigate to="/panel/pm" replace />;
|
||||||
|
}
|
||||||
if (user?.role === "supervisor") return <Navigate to="/panel/pm" replace />;
|
if (user?.role === "supervisor") return <Navigate to="/panel/pm" replace />;
|
||||||
if (user?.role === "pm") return <Navigate to="/inventory" replace />;
|
if (user?.role === "pm") return <Navigate to="/inventory" replace />;
|
||||||
return <DashboardPage />;
|
return <DashboardPage />;
|
||||||
@@ -130,10 +134,16 @@ function PmPanelPage() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// دسترسی پنل PM: همه نقشها دسترسی دارند
|
// دسترسی پنل PM: ادمین، پنل pm (full/limited) و نقشهای میراث pm/supervisor —
|
||||||
|
// مدیر تدارکات (یا هر کاربر بدون پنل pm) دسترسی ندارد
|
||||||
function RequirePmPanel({ children }: { children: React.ReactNode }) {
|
function RequirePmPanel({ children }: { children: React.ReactNode }) {
|
||||||
const user = useAuthStore((s) => s.user);
|
const user = useAuthStore((s) => s.user);
|
||||||
const allowed = user?.role === "admin" || user?.role === "procurement_manager" || user?.role === "pm" || user?.role === "supervisor";
|
const panels = user?.panels ?? {};
|
||||||
|
const allowed =
|
||||||
|
user?.role === "admin" ||
|
||||||
|
Boolean(panels.pm) ||
|
||||||
|
user?.role === "pm" ||
|
||||||
|
user?.role === "supervisor";
|
||||||
if (!allowed) return <Navigate to="/" replace />;
|
if (!allowed) return <Navigate to="/" replace />;
|
||||||
return <>{children}</>;
|
return <>{children}</>;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user