34 lines
1.2 KiB
TypeScript
34 lines
1.2 KiB
TypeScript
export const ROLE_RESOURCES = [
|
|
{ key: "snapshot", label: "Экспорт" },
|
|
{ key: "devices", label: "Устройства" },
|
|
{ key: "vehicles", label: "Транспорт" },
|
|
{ key: "users", label: "Пользователи" },
|
|
{ key: "sights", label: "Достопримечательности" },
|
|
{ key: "stations", label: "Остановки" },
|
|
{ key: "routes", label: "Маршруты" },
|
|
{ key: "countries", label: "Страны" },
|
|
{ key: "cities", label: "Города" },
|
|
{ key: "carriers", label: "Перевозчики" },
|
|
] as const;
|
|
|
|
export type PermissionLevel = "none" | "ro" | "rw";
|
|
|
|
export function getPermissionLevel(roles: string[], resource: string): PermissionLevel {
|
|
if (roles.includes(`${resource}_rw`)) return "rw";
|
|
if (roles.includes(`${resource}_ro`)) return "ro";
|
|
return "none";
|
|
}
|
|
|
|
export function applyPermissionChange(
|
|
roles: string[],
|
|
resource: string,
|
|
level: PermissionLevel,
|
|
): string[] {
|
|
const filtered = roles.filter(
|
|
(r) => r !== `${resource}_ro` && r !== `${resource}_rw`,
|
|
);
|
|
if (level === "ro") return [...filtered, `${resource}_ro`];
|
|
if (level === "rw") return [...filtered, `${resource}_rw`];
|
|
return filtered;
|
|
}
|