module Tuersteher::ControllerExtensions

Module zum Include in Controllers Dieser muss die folgenden Methoden bereitstellen:

login_context : akt. Login-Contex
access_denied :  Methode aus dem authenticated_system, welche ein redirect zum login auslöst

Der Loginlogin_contex muss fuer die hier benoetigte Funktionalitaet die Methode:

has_role?(role)  # role the Name of the Role as Symbol

besitzen.

Beispiel der Einbindung in den ApplicationController

include Tuersteher::ControllerExtensions
before_filter :check_access # methode is from Tuersteher::ControllerExtensions

Public Class Methods

included(base) click to toggle source
# File lib/tuersteher.rb, line 303
def self.included(base)
  base.class_eval do
    # Diese Methoden  auch als Helper fuer die Views bereitstellen
    if(self.respond_to?(:helper_method))
      helper_method :path_access?, :model_access?, :purge_collection
    end
  end
end

Public Instance Methods

model_access?(model, permission) click to toggle source

Pruefen Zugriff auf ein Model-Object

model das Model-Object permission das geforderte Zugriffsrecht (:create, :update, :destroy, :get)

liefert true/false

# File lib/tuersteher.rb, line 290
def model_access? model, permission
  AccessRules.model_access? login_context, model, permission
end
path_access?(path, method = :get) click to toggle source

Pruefen Zugriff fuer eine Web-action

path Pfad der Webresource (String) method http-Methode (:get, :put, :delete, :post), default ist :get

# File lib/tuersteher.rb, line 280
def path_access?(path, method = :get)
  AccessRules.path_access? login_context, path, method
end
purge_collection(collection, permission) click to toggle source

Bereinigen (entfernen) aller Objecte aus der angebenen Collection, wo der akt. login_context nicht das angegebene Recht hat

liefert ein neues Array mit den Objecten, wo der spez. Zugriff arlaubt ist

# File lib/tuersteher.rb, line 298
def purge_collection collection, permission
  AccessRules.purge_collection(login_context, collection, permission)
end

Protected Instance Methods

check_access() click to toggle source

Pruefen, ob Zugriff des login_context fuer aktullen Request erlaubt ist

# File lib/tuersteher.rb, line 316
def check_access

  ar_storage = AccessRulesStorage.instance
  unless ar_storage.ready?
    # bei nicht production-env check-intervall auf 5 sek setzen
    ar_storage.check_intervall = 5 if Rails.env!='production'
    # set root-path as prefix for all path rules
    prefix = respond_to?(:root_path) && root_path
    ar_storage.path_prefix = prefix if prefix && prefix.size > 1
    ar_storage.read_rules
  end

  # bind login_context on the current thread
  Thread.current[:login_context] = login_context

  req_method = request.method
  req_method = req_method.downcase.to_sym if req_method.is_a?(String)
  url_path = request.fullpath
  unless path_access?(url_path, req_method)
    lc_id = login_context && (login_context.respond_to?(:id) ? login_context.id : login_context.object_id)
    msg = "Tuersteher#check_access: access denied for #{url_path} :#{req_method} login_context.id=#{lc_id}"
    Tuersteher::TLogger.logger.warn msg
    logger.warn msg  # log message also for Rails-Default logger
    access_denied  # Methode aus dem authenticated_system, welche z.B. ein redirect zum login auslöst
  end
end