6 Stimmen

Authentifizieren Sie sich mit Devise und Rails Admin für bestimmte Routen

Ich verwende Rails Admin und Devise für Admin- und Benutzermodell. Ich habe dem Benutzermodell eine Spalte "admin" hinzugefügt, um seine Identität anzuzeigen.

In der config/routes.rb mounte ich /admin für RailsAdmin:Engine

Ich möchte nur current_user.admin Benutzern den Zugriff auf /admin erlauben, ansonsten den Benutzer zur Startseite umleiten.

Wie kann ich dies im saubersten Code implementieren?

15voto

rorra Punkte 9443

Auf Ihren Admin-Controllern:

class MyAdminController < ApplicationController
  before_filter :authenticate_user!
  before_filter :require_admin
end

auf Ihrem Anwendungscontroller:

class ApplicationController < ActionController::Base

  def require_admin
    unless current_user && current_user.role == 'admin'
      flash[:error] = "Sie sind kein Administrator"
      redirect_to root_path
    end        
  end
end

Entschuldigung, ich habe nicht bemerkt, dass es sich um Rails Admin handelt. Sie können Folgendes tun:

# in config/initializer/rails_admin.rb

RailsAdmin.config do |config|
  config.authorize_with do |controller|
    unless current_user.try(:admin?)
      flash[:error] = "Sie sind kein Administrator"
      redirect_to main_app.root_path
    end
  end
end

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X