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 |
0 Kommentare zu "Typus Gem - eigene Authentifizierung"
Kommentar verfassen