Canary (canary v2.0.0-dev)
An authorization library in Elixir for Plug and Phoenix.LiveView applications that restricts what resources the current user is allowed to access, and automatically load and assigns resources.
load_resource/2 and authorize_resource/2 can be used by themselves, while load_and_authorize_resource/2 combines them both.
The plug functions are defined in Canary.Plugs
In order to use Canary authorization in standard pages with plug, just import Canary.Plugs and use plugs, for example:
defmodule MyAppWeb.PostController do
use MyAppWeb, :controller
import Canary.Plugs
plug :load_and_authorize_resource,
model: Post,
current_user: :current_user,
only: [:show, :edit, :update]
endThe LiveView hooks are defined in Canary.Hooks
In order to use Canary authorization in LiveView, just use Canary.Hooks and mount hooks, for example:
defmodule MyAppWeb.PostLive do
use MyAppWeb, :live_view
use Canary.Hooks
mount_canary :load_and_authorize_resource,
on: [:handle_params, :handle_event],
current_user: :current_user,
model: Post,
only: [:show, :edit, :update]
endThis will attach hooks to the LiveView module with Phoenix.LiveView.attach_hook/4.
In the example above hooks will be attached to handle_params and handle_event stages of the LiveView lifecycle.
Please read the documentation for Canary.Plugs and Canary.Hooks for more information.