/** * Type definitions for the guard system * * @module @jay-js/system/guard/types */ /** * Represents a permission entry in the guard system */ export type TPermission = { /** * The role or roles that the permission applies to */ role: string | string[]; /** * The subject or subjects that the permission applies to */ subject: string | string[]; /** * The action or actions that the permission applies to */ action: string | string[]; /** * Whether the permission is granted (true) or denied (false) */ granted: boolean; /** * Optional attributes to further restrict the permission */ attributes?: string | string[]; }; /** * Interface for the permission definition builder */ export type TDefinePermission = { /** * Allows the specified actions on the subject * * @param action - The action or actions to allow * @param attributes - Optional attributes to restrict the permission to * @returns The permission definition object for chaining */ allow: (action: string | string[], attributes?: string[]) => TDefinePermission; /** * Forbids the specified actions on the subject * * @param action - The action or actions to forbid * @param attributes - Optional attributes to restrict the permission to * @returns The permission definition object for chaining */ forbid: (action: string | string[], attributes?: string[]) => TDefinePermission; /** * Saves and returns the defined permissions * * @returns The array of permission objects */ save: () => TPermission[]; }; /** * Result of a permission check */ export type THasPermission = { /** * Whether the permission is granted */ granted: boolean; /** * Available attributes for the permission, if any */ attributes?: string[]; };