Tous les administrateurs de votre web-app ne sont pas forcément des développeurs. Developpé par Thoughbot la gem Administrate permet de créer rapidement une interface d’administration. Grâce à Administrate, vos administrateurs pourront directement créer ou modifier ces modèles sans avoir à passer par la console Rails.
Il existe deux gems équivalentes qui sont Active Admin et Rails Admin.
Nous supposons donc qu’il y a une application Rails avec déjà plusieurs modèles.
Il faut ajouter la Gemfile dans le Gemfile
.
# Gemfile
# [...]
gem 'administrate'
Ensuite on installe la gem.
$ bundle install
$ rails generate administrate:install
$ rails server
Le dashboard est maintenant disponible sur localhost:3000/admin.
Dans le fichier config/routes.rb
on peut voir que les routes ont été générées automatiquement.
# config/routes.rb
Rails.application.routes.draw do
namespace :admin do
resources :users
resources :bookings
resources :flats
root to: "users#index"
end
# [...]
end
Des contrôleurs ont aussi été créé automatiquement dans app/controllers/admin
ainsi que des modèles dans app/dashboards
.
Vous pouvez enlevez ou ajouter des variables d’instance dans ATTRIBUTE_TYPES.
Pour modifier les options d’edit et de new il faut aller dans les contrôleurs (plus d’explications dans la documentation)
Pour modifier ce qui est affiché dans les vues il faut aller dans le dossier app/dashboards.
Dans l’array COLLECTION_ATTRIBUTES vous avez les variables affichées dans l’index. Dans l’array SHOW_PAGE_ATTRIBUTES, ce qui est affiché dans la show.
Et dans FORM_ATTRIBUTES, vous avez les variables qui s’affichent dans les formulaires d’edit ou de new.
Si on va sur l’adresse localhost:3000/admin on se rend compte que les instances de Flat et les User sont affichées avec leur id ce qui n’est pas très lisible.
On va donc ajouter une méthode dans app/dashboards/user_dashboard.rb
pour afficher le nom des utilisateurs correctement.
# app/dashboards/user_dashboard.rb
class UserDashboard < Administrate::BaseDashboard
# [...]
def display_resource(user)
"#{user.first_name} #{user.last_name}"
end
end
Et de même pour les Flat.
# app/dashboards/flat_dashboard.rb
class FlatDashboard < Administrate::BaseDashboard
# [...]
def display_resource(flat)
"#{flat.address}"
end
end
Si on ajoute un nouveau modèle dans notre app, par exemple Foo, il faut générer les outils administrate avec la commande suivante.
$ rails generate administrate:dashboard Foo
Tout le monde ne doit pas avoir accès à la partie d’administration du site sous peine de pouvoir modifier toutes les données de votre site. Afin de protéger l’accès, on va ajouter une authentification http.
# app/controllers/admin/application_controller.rb
module Admin
class ApplicationController < Administrate::ApplicationController
http_basic_authenticate_with name: ENV['ADMIN_LOGIN'], password: ENV['ADMIN_PASSWORD']
end
end
Et ajouter dans votre fichier .env
vos logins et mots de passe.
# .env
ADMIN_LOGIN="login"
ADMIN_PASSWORD="password"
La documentation de la gem est disponible ici
Publié le 22/07/2019