All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[0.2.0] - 2026-10-17
Added
- Schema-First Resource & Policy Derivation:
- Added
from_zed,definition,derive_relations, andderive_policiesoptions to theauthzedandrebacDSL sections. AshAuthzed.Transformerautomatically derives%AshAuthzed.Relation{}entities from.zed/.yamldefinitions when matching:<relation>_idattributes exist on the resource, while preserving explicit DSL overrides.derive_policiesautomatically synthesizesAsh.Policy.Authorizerpolicies from.zedpermissions (truefor standard mappings or a custom keyword list/map), grouping permissions by Ashaction_typewithORsemantics.
- Added
- Runtime Schema Lifecycle (
apply_schema/2& Mix Task):Added
AshAuthzed.apply_schema/2and theAshAuthzed.Adapter.apply_schema/2callback acrossAshAuthzed.Adapters.Licet(Licet.write_schema/3),AshAuthzed.Adapters.SpiceDBHttp(POST /v1/schema/write), andAshAuthzed.Adapters.Memory, with:telemetry.span/3instrumentation ([:ash_authzed, :apply_schema, :start | :stop | :exception]).- Added
mix ash_authzed.schema.applyto push.zedor.yamlschemas to the configured adapter from the CLI.
[0.1.0] - 2026-10-17
Added
- Declarative
AshAuthzed(AshRebac) Spark DSL extension forAsh.Resourcewithobject_type,relation,external_role(includingtarget: :selfandsubject_attributedynamic templates), andconditional_wildcardentities. - Native
Ash.Policy.Authorizerpolicy check macros (authzed_can/1,2,authzed_can_assign/2,rebac_can/1,2, andrebac_can_assign/2) supporting both record-scoped (filter/check) and static target (on:/target:) checks. - Automatic lifecycle tuple synchronization via
AshAuthzed.SyncChangesupporting single-record actions, atomic updates, and deduplicatedafter_batch/3bulk operations (Ash.bulk_create!,Ash.bulk_update!,Ash.bulk_destroy!). - Compile-time
.zedand.yamlschema drift verifier (AshAuthzed.Verifiers.VerifyZedSchema) with Jaro-distance suggestions, static target and dynamic template validation, and@external_resourcetracking. - Pluggable adapter behaviour (
AshAuthzed.Adapter) with:telemetryinstrumentation and three built-in adapters:AshAuthzed.Adapters.Licet(embedded Postgres-backed Zanzibar engine)AshAuthzed.Adapters.SpiceDBHttp(SpiceDB / AuthZed HTTP API viaReq)AshAuthzed.Adapters.Memory(caller-supervised in-memory store forasync: truetests)
- Mix tasks:
mix ash_authzed.install(Igniter installer),mix ash_authzed.backfill(keyset-paginated tuple reconciliation), andmix ash_authzed.bench(adapter throughput benchmark suite). - Dual permission modeling examples, validation fixtures (
priv/licet/user_permissions.yamlandpriv/licet/admin_capabilities.yaml), and ExDoc / LLM guides (Getting Started,DSL: AshAuthzed,usage-rules.md) covering both Role-Based (RBAC in ReBAC) and Capability-Based (admin_create,admin_edit,admin_delete) patterns.