Packages

Simplified authorization for Phoenix

Current section

Files

Jump to
can lib can.ex
Raw

lib/can.ex

defmodule Can do
defmacro __using__(handler) do
quote do
import Can.Authorizer
import Can
@unauthorized_handler unquote(handler)
end
end
defmacro can(conn, resource \\ nil, do: block) do
quote do
case authorize(unquote(conn), unquote(resource)) do
{:ok, policy} ->
unquote(block)
{:error, policy} ->
case @unauthorized_handler do
{module_name, function_name} ->
apply(module_name, function_name, [unquote(conn), unquote(resource), policy])
function_name ->
apply(__MODULE__, function_name, [unquote(conn), unquote(resource), policy])
end
end
end
end
end