76 lines
2.1 KiB
TypeScript
76 lines
2.1 KiB
TypeScript
import type { UserRole } from "@/src/types/user";
|
|
|
|
/** Ruoli canonici in italiano (valori consigliati in DB). */
|
|
export const USER_ROLES: UserRole[] = ["amministratore", "tecnico", "operatore"];
|
|
|
|
/** Mappatura ruoli legacy → ruoli attuali. */
|
|
const LEGACY_ROLE_MAP: Record<string, UserRole> = {
|
|
admin: "amministratore",
|
|
sviluppo: "amministratore",
|
|
manager: "tecnico",
|
|
user: "operatore",
|
|
amministratore: "amministratore",
|
|
tecnico: "tecnico",
|
|
operatore: "operatore",
|
|
};
|
|
|
|
export const ROLE_LABELS: Record<UserRole, string> = {
|
|
amministratore: "Amministratore",
|
|
tecnico: "Tecnico",
|
|
operatore: "Operatore",
|
|
};
|
|
|
|
export function isUserRole(value: string): value is UserRole {
|
|
return USER_ROLES.includes(value as UserRole);
|
|
}
|
|
|
|
export function normalizeRole(value: string): UserRole | null {
|
|
const key = value.trim().toLowerCase();
|
|
const mapped = LEGACY_ROLE_MAP[key];
|
|
return mapped ?? null;
|
|
}
|
|
|
|
export interface AppPermissions {
|
|
canManageUtenti: boolean;
|
|
canManageStabilimenti: boolean;
|
|
canScaricoArticoli: boolean;
|
|
canAssegnaArticoliMacchina: boolean;
|
|
canEditMacchine: boolean;
|
|
canRemoveArticoloMacchina: boolean;
|
|
canSearchPrices: boolean;
|
|
}
|
|
|
|
export function getPermissions(ruolo: UserRole): AppPermissions {
|
|
switch (ruolo) {
|
|
case "amministratore":
|
|
return {
|
|
canManageUtenti: true,
|
|
canManageStabilimenti: true,
|
|
canScaricoArticoli: true,
|
|
canAssegnaArticoliMacchina: true,
|
|
canEditMacchine: true,
|
|
canRemoveArticoloMacchina: true,
|
|
canSearchPrices: true,
|
|
};
|
|
case "tecnico":
|
|
return {
|
|
canManageUtenti: false,
|
|
canManageStabilimenti: false,
|
|
canScaricoArticoli: true,
|
|
canAssegnaArticoliMacchina: true,
|
|
canEditMacchine: true,
|
|
canRemoveArticoloMacchina: true,
|
|
canSearchPrices: true,
|
|
};
|
|
case "operatore":
|
|
return {
|
|
canManageUtenti: false,
|
|
canManageStabilimenti: false,
|
|
canScaricoArticoli: false,
|
|
canAssegnaArticoliMacchina: false,
|
|
canEditMacchine: false,
|
|
canRemoveArticoloMacchina: false,
|
|
canSearchPrices: false,
|
|
};
|
|
}
|
|
}
|