feat: add A-card operations frontend and backend foundation
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
import { useAuth, type AuthUser } from "~/context/AuthContext";
|
||||
|
||||
export type OperationsRole = "business" | "model" | "admin";
|
||||
export type OperationsPageKey =
|
||||
| "workbench"
|
||||
| "usage"
|
||||
| "models"
|
||||
| "banks"
|
||||
| "deployed-models"
|
||||
| "monitoring"
|
||||
| "reports"
|
||||
| "report-summary"
|
||||
| "workflows"
|
||||
| "knowledge"
|
||||
| "rules"
|
||||
| "prompts"
|
||||
| "settings";
|
||||
|
||||
export type OperationsAction =
|
||||
| "workflow:create"
|
||||
| "workflow:advance"
|
||||
| "workflow:business-confirm"
|
||||
| "monitor:initial-review"
|
||||
| "monitor:final-review"
|
||||
| "report:edit"
|
||||
| "report:send"
|
||||
| "rules:manage"
|
||||
| "prompts:manage"
|
||||
| "settings:manage";
|
||||
|
||||
const PAGE_ROLE_VISIBILITY: Record<OperationsPageKey, OperationsRole[]> = {
|
||||
workbench: ["business", "model", "admin"],
|
||||
usage: ["admin"],
|
||||
models: ["business", "model", "admin"],
|
||||
banks: ["business", "model", "admin"],
|
||||
"deployed-models": ["model", "admin"],
|
||||
monitoring: ["business", "model", "admin"],
|
||||
reports: ["business", "model", "admin"],
|
||||
"report-summary": ["business", "model", "admin"],
|
||||
workflows: ["business", "model", "admin"],
|
||||
knowledge: ["model", "admin"],
|
||||
rules: ["model", "admin"],
|
||||
prompts: ["model", "admin"],
|
||||
settings: ["admin"],
|
||||
};
|
||||
|
||||
const ACTION_ROLE_VISIBILITY: Record<OperationsAction, OperationsRole[]> = {
|
||||
"workflow:create": ["business", "admin"],
|
||||
"workflow:advance": ["model", "admin"],
|
||||
"workflow:business-confirm": ["business", "admin"],
|
||||
"monitor:initial-review": ["model", "admin"],
|
||||
"monitor:final-review": ["business", "admin"],
|
||||
"report:edit": ["model", "admin"],
|
||||
"report:send": ["model", "admin"],
|
||||
"rules:manage": ["admin"],
|
||||
"prompts:manage": ["model", "admin"],
|
||||
"settings:manage": ["admin"],
|
||||
};
|
||||
|
||||
export function resolveOperationsRole(user: AuthUser | null): OperationsRole {
|
||||
if (user?.is_system_admin || user?.role_code === "admin") return "admin";
|
||||
const code = user?.role_code?.toLowerCase() ?? "";
|
||||
if (["business", "business_team", "biz"].includes(code)) return "business";
|
||||
return "model";
|
||||
}
|
||||
|
||||
export function useOperationsRole(): OperationsRole {
|
||||
return resolveOperationsRole(useAuth().user);
|
||||
}
|
||||
|
||||
export function isOperationsPageVisibleForRole(role: OperationsRole, page: OperationsPageKey): boolean {
|
||||
return PAGE_ROLE_VISIBILITY[page].includes(role);
|
||||
}
|
||||
|
||||
export function isOperationsActionVisibleForRole(role: OperationsRole, action: OperationsAction): boolean {
|
||||
return ACTION_ROLE_VISIBILITY[action].includes(role);
|
||||
}
|
||||
|
||||
export function operationsPageFromPath(pathname: string): OperationsPageKey {
|
||||
const path = pathname.replace(/^\/operations\/?/, "").split("/")[0] ?? "";
|
||||
if (!path) return "workbench";
|
||||
if (path === "monitoring") return "monitoring";
|
||||
if (path in PAGE_ROLE_VISIBILITY) return path as OperationsPageKey;
|
||||
return "workbench";
|
||||
}
|
||||
Reference in New Issue
Block a user