# `Selecto.Capabilities.Resolver`

Behaviour for host-owned capability policy resolvers.

Selecto owns the request and decision data shapes, but host applications own
authorization truth. A resolver may implement only `c:decide/2`; callers can
still use the shared batch helper, which falls back to calling `c:decide/2`
for each request. Resolvers that can answer more efficiently may also
implement `c:decide_many/2`.

# `context`

```elixir
@type context() :: map()
```

# `decision_result`

```elixir
@type decision_result() ::
  Selecto.Capabilities.Decision.t()
  | {:ok, Selecto.Capabilities.Decision.t()}
  | {:error, term()}
```

# `decide`

```elixir
@callback decide(Selecto.Capabilities.Request.t(), context()) :: decision_result()
```

# `decide_many`
*optional* 

```elixir
@callback decide_many([Selecto.Capabilities.Request.t()], context()) ::
  [Selecto.Capabilities.Decision.t()]
  | {:ok, [Selecto.Capabilities.Decision.t()]}
  | {:error, term()}
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
