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:
- polix.document - Document protocol and implementations
- polix.ast - AST data structures
- polix.parser - Policy DSL parser
- polix.evaluator - Evaluation engine
- polix.policy - Policy definition macros
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.