args() :: map()
context() :: map()
error_response() :: {:error, atom()} | {:error, atom(), String.t()}
field() :: atom()
parent() :: any()
response() :: :ok | error_response()
t() :: term()
user() :: struct() | nil
can?(t(), user(), parent(), field(), context(), args()) :: response()