Installer un back-office avec Administrate

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.

1. Ajouter la gem

Il faut ajouter la Gemfile dans le Gemfile.

# Gemfile

# [...]
gem 'administrate'

Ensuite on installe la gem.

$ bundle install

2. Créer les routes et les contrôleurs

$ rails generate administrate:install
$ rails server

Le dashboard est maintenant disponible sur localhost:3000/admin.

administrate

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.

3. Modifier les vues

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.

administrate

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

administrate

4. Créer un dashboard additionel

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

5. Protéger l’accès avec un mot de passe.

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