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 ?? {};
|
||||
if (panels.inventory) return <Navigate to="/inventory" replace />;
|
||||
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 === "pm") return <Navigate to="/inventory" replace />;
|
||||
return <DashboardPage />;
|
||||
@@ -130,10 +134,16 @@ function PmPanelPage() {
|
||||
);
|
||||
}
|
||||
|
||||
// دسترسی پنل PM: همه نقشها دسترسی دارند
|
||||
// دسترسی پنل PM: ادمین، پنل pm (full/limited) و نقشهای میراث pm/supervisor —
|
||||
// مدیر تدارکات (یا هر کاربر بدون پنل pm) دسترسی ندارد
|
||||
function RequirePmPanel({ children }: { children: React.ReactNode }) {
|
||||
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 />;
|
||||
return <>{children}</>;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user