Blog

Typus Gem - eigene Authentifizierung

Typus Gem - eigene Authentifizierung

Im Rahmen des Abschlussprojektes an der FH Salzburg arbeite ich gerade mit Thomas Czernik und Dominik Goltermann an einer komplett neuen Version des Porfolios der Studiengänge Multimedia-Art und Multimedia-Technology. Wir setzen die Arbeit mit Ruby on Rails und Javascript um. Selbstverständlich benötigen wir auch einen Admin-Bereich. Da wir hier auf das ldap-System unserer Typus Gem einsetzen wollen, benötigen wir dafür ein eigenes Authentifizierungs-Module um die von Typus selber gegebene Authentifizierung umgehen zu können.

Hierfür habe ich ein eigenes Authentifzierungs-Module geschrieben. Dies ermöglicht mir Typus vollständig von der Authentifizierung und Rollenverteilung zu entkoppeln. Die Rechte selber werden über eigene before_filter geregelt. Das Module wird folgendermaßen eingesetzt:

/lib/typus/fhsauth.rb


module Typus
  module Authentication
    module Fhsauth
      protected

      include Base

      def admin_user
        @admin_user = current_user if current_user && current_user.admin_or_editor?
      end

      def authenticate
        if !current_user
          flash_redirect
        elseif !current_user.admin_or_editor?
          flash_redirect
        end
      end
      
      def current_user
        User.find_by_id(session[:id]
      end

      def flash_redirect
       flash[:error] = "Bitte als Administrator einloggen!"
       redirect_to root_url
      end
    end
  end
end

 

/lib/typus/typus_user_attributes.rb


module TypusUserAttributes
  def is_root?
    true
  end
  
  def is_not_root?
    !is_root?
  end

  def locale
    ::I18n.locale
  end

  def application(name)
    Typus.application(name)
  end

  def can?(*args)
    true
  end

  def cannot?(*args)
    !can?(*args)
  end

  def applications
    Typus.applications
  end


end

 

/app/models/user.rb

require Rails.root + "lib/typus/typus_user_attributes"


class User < ActiveRecord::Base

  # Konstanten für Userrollen
  USERROLE = 0 # default in der Migration!
  ADMINROLE = 1
  EDITORROLE = 2

  # für Typus notwendig, damit intern die
  # Typus Methoden für das Adminpanel funktionieren
  include TypusUserAttributes

end

/config/typus/timestamp_application.yml

Hier ganz normal die einzelnen Models fürs Typus festlegen

/app/initializers/typus.rb

require Rails.root + "lib/typus/fhsauth"


Typus.setup do |config|

  # Eigene Authentifizierung:
  # Diese faked für Typus aktuell eingeloggten User
  # Die eigentlichen Rechte werden über eigene before_filter
  # in controllers/admin/model_controller.rb gehandelt
  config.authentication = :fhsauth

end

Die Rollenverteilung und Rechtevergabe muss über eigene before_filter in den Admin-Controllern stattfinden.
Mit diesesm eigenen Authentifizierungs-Module kann man alle Typus-Möglichkeiten ganz normal und wie gewohnt verwenden.
Beispiel für einen solchen AdminMasterController (von diesem könnten beispielsweise andere erben):

/app/controllers/admin/admin_master_controller.rb


class Admin::AdminMasterController < Admin::RessourcesController

  before_filter :require_admin

  helper_method :current_user

  def require_admin
    if !current_user
      flash_redirect
    elsif !current_user.admin?
      flash_redirect
    end
  end

  def flash_redirect
    flash[:error] = "Bitte als Administrator einloggen!"
    redirect_to root_url
  end

  def current_user
    User.find_by_id(session[:id]
  end

end

 

13.04.2011
Matthias Frick
Ruby on Rails
0 Kommentare

Über den Autor

Matthias Frick
Matthias Frick, MSc.

Er ist ein langjähriger Ruby-on-Rails Entwickler und leitet das Unternehmen Frick-Web.

0 Kommentare zu "Typus Gem - eigene Authentifizierung"

Kommentar verfassen