polix.core

Core functionality for polix - a DSL for writing declarative policies.

Polix provides a vector-based DSL for defining policies that evaluate against documents. Policies support document accessors (:doc/key), URI accessors (:uri/resource), function calls, and literals.

Quick Start

Define a policy:

(require '[polix.core :as polix])

(polix/defpolicy AdminOnly
  "Only admins can access"
  [:= :doc/role "admin"])

Evaluate a policy:

(let [document (polix/map-document {:role "admin"})
      result (polix/evaluate (:ast AdminOnly) document)]
  (cats.core/extract result))
  ;=> true

Main Concepts

  • Document: Key-value store for policy evaluation data
  • Policy: Declarative rule defined via defpolicy
  • AST: Abstract syntax tree representation of policies
  • Evaluator: Evaluates AST nodes against documents

Namespaces

The implementation is split across multiple namespaces:

ast-node

classify-token

default-evaluator

defpolicy

macro

(defpolicy name & args)

Defines a policy with a name, optional docstring, and policy expression.

See polix.policy/defpolicy for full documentation.

doc-accessor

doc-accessor?

doc-contains?

multimethod

doc-get

doc-keys

doc-merge

doc-project

Document

protocol

eval-node

evaluate

Evaluator

protocol

extract-doc-keys

function-call

literal

map-document

parse-policy

thunk

thunkable?

uri

uri-accessor?