mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-12 00:29:04 +00:00
17 lines
707 B
TypeScript
17 lines
707 B
TypeScript
import { MongoAbility, RawRuleOf } from "@casl/ability";
|
|
import { PackRule, unpackRules } from "@casl/ability/extra";
|
|
import { z } from "zod";
|
|
|
|
export const UnpackedPermissionSchema = z.object({
|
|
subject: z
|
|
.union([z.string().min(1), z.string().array()])
|
|
.transform((el) => (typeof el !== "string" ? el[0] : el))
|
|
.optional(),
|
|
action: z.union([z.string().min(1), z.string().array()]).transform((el) => (typeof el === "string" ? [el] : el)),
|
|
conditions: z.unknown().optional(),
|
|
inverted: z.boolean().optional()
|
|
});
|
|
|
|
export const unpackPermissions = (permissions: unknown) =>
|
|
UnpackedPermissionSchema.array().parse(unpackRules((permissions || []) as PackRule<RawRuleOf<MongoAbility>>[]));
|