GenAI.Approval.Permission.Store behaviour (GenAI Approval v0.1.0)

Copy Markdown View Source

Pluggable persistence for permission rules.

A store is addressed as {module, ref}ref is whatever the module needs (an ETS table, a repo name, a pid). Session-scoped rules are tagged with session_id and only returned for that session; :call-scoped approvals are transient and never stored.

Summary

Callbacks

All unexpired candidate rules for a subject + session (global rules included).

Callbacks

list(ref)

@callback list(ref :: term()) :: {:ok, [GenAI.Approval.Permission.Rule.t()]}

put(ref, t)

@callback put(ref :: term(), GenAI.Approval.Permission.Rule.t()) :: :ok | {:error, term()}

revoke(ref, rule_id)

@callback revoke(ref :: term(), rule_id :: String.t()) :: :ok | {:error, term()}

rules(ref, subject, session_id)

@callback rules(
  ref :: term(),
  subject :: String.t() | nil,
  session_id :: String.t() | nil
) ::
  {:ok, [GenAI.Approval.Permission.Rule.t()]}

All unexpired candidate rules for a subject + session (global rules included).