An admin UI for Ash resources. Built with Phoenix LiveView.
https://www.youtube.com/watch?v=aFMLz3cpQ8c
First, ensure you've added ash_admin to your mix.exs
file.
{:ash_admin, "~> 0.9.8"}
Ensure your apis are configured in config.exs
config :my_app, ash_apis: [MyApp.Foo, MyApp.Bar]
Add the admin extension to each api you want to show in AshAdmin dashboard, and configure it to show. See AshAdmin.Api
for more configuration options.
# In your Api(s)
use Ash.Api,
extensions: [AshAdmin.Api]
admin do
show? true
end
Resources in each Api will be automagically included in AshAdmin. See AshAdmin.Resource
for more resource configuration options. Specifically, if you app has an actor you will want to configure that. Ash Admin allows you to change actors and therefore doesn't rely on Ash.set_actor
# In your resource that acts as an actor (e.g. User)
use Ash.Resource,
extensions: [AshAdmin.Resource]
admin do
actor?(true)
end
Modify your router to add AshAdmin at whatever path you'd like to serve it at.
defmodule MyAppWeb.Router do
use Phoenix.Router
import AshAdmin.Router
# AshAdmin requires a Phoenix LiveView `:browser` pipeline
# If you DO NOT have a `:browser` pipeline already, then AshAdmin has a `:browser` pipeline
# Most applications will not need this:
admin_browser_pipeline :browser
scope "/" do
# Pipe it through your browser pipeline
pipe_through [:browser]
ash_admin "/admin"
end
end
Note: there is no builtin security for your AshAdmin (except your apps normal policies). In most cases you will want to secure your AshAdmin routes in some way to prevent them from being public
Now start your project (usually by running mix phx.server
in a terminal) and visit /admin
in your browser (or whatever path you gave to ash_admin
in your router).
If your app specifies a content security policy header, eg. via
plug :put_secure_browser_headers, %{"content-security-policy" => "default-src 'self'"}
in your router, then all of the styles and JavaScript used to power AshAdmin will be blocked by your browser.
To avoid this, you can add the specific AshAdmin nonces to the default-src
allowlist, ie.
plug :put_secure_browser_headers, %{"content-security-policy" => "default-src 'nonce-ash_admin-Ed55GFnX' 'self'"}
This will allow AshAdmin-generated inline CSS and JS blocks to execute normally.
See the documentation in AshAdmin.Resource
and AshAdmin.Api
for information on the available configuration.
If your Admin UI is not responding as expected. Check your browser's developer console for content-security-policy violations (see above).
To work on ash_admin, you'll want to be able to run the dev app. You'll need to have postgres setup locally, at which point you can do the following:
mix ash_postgres.create
mix migrate
mix migrate_tenants
mix setup
Then, you can start the app with: mix dev
If you make changes to the resources, you can generate migrations with mix generate_migrations
If you make changes to any of the assets (CSS or JavaScript), including updating dependencies that include assets such as LiveView, you will need to recompile the assets with mix assets.build
.
Ash is made possible by its excellent community!