Packages

A policy based access authorizer for the Ash Framework

Retired package: Renamed - package renamed to ash_policy_authorizer

Current section

Files

Jump to
ash_policy_access lib ash_policy_access.ex
Raw

lib/ash_policy_access.ex

defmodule AshPolicyAccess do
@moduledoc """
Authorization in Ash is done via declaring `rules` for actions,
and in the case of stateful actions, via declaring `authoriation_steps` on attributes
and relationships.
# TODO: consider this coverage metric when building the test framework
https://en.wikipedia.org/wiki/Modified_condition/decision_coverage
"""
@type request :: Ash.Engine.Request.t()
@type side_load :: {:side_load, Keyword.t()}
@type prepare_instruction :: side_load
defmacro __using__(_) do
quote do
import AshPolicyAccess.Dsl, only: [policies: 1, policies: 2]
Module.register_attribute(__MODULE__, :ash_policies, accumulate: true)
@extensions AshPolicyAccess
@authorizers AshPolicyAccess.Authorizer
require AshPolicyAccess
end
end
def policies(resource) do
resource.ash_policies()
end
def before_compile_hook(_env) do
quote do
def ash_policies() do
@ash_policies
end
end
end
end