class Tuersteher::AccessRules

Public Class Methods

model_access?(login_context, model, permission) click to toggle source

Pruefen Zugriff auf ein Model-Object

@param login_context Login-Contex, für den der Zugriff geprüft werden soll (muss Methode has_role? haben) @param model das Model-Object @param permission das geforderte Zugriffsrecht (:create, :update, :destroy, :get)

liefert true/false

# File lib/tuersteher.rb, line 225
def model_access? login_context, model, permission
  raise "Wrong call! Use: model_access(model-instance-or-class, permission)" unless permission.is_a? Symbol
  return false unless model

  rule = AccessRulesStorage.instance.model_rules.detect do |rule|
    rule.fired? model, permission, login_context
  end
  access = rule && !rule.deny?
  if Tuersteher::TLogger.logger.debug?
    lc_id = login_context && login_context.respond_to?(:id) ? login_context.id : login_context.object_id
    if model.instance_of?(Class)
      Tuersteher::TLogger.logger.debug(
        "Tuersteher: model_access?(login_context.id=#{lc_id}, model=#{model}, permission=#{permission}) =>  #{access || 'denied'} #{rule}")
    else
      Tuersteher::TLogger.logger.debug(
        "Tuersteher: model_access?(login_context.id=#{lc_id}, model=#{model.class}(#{model.respond_to?(:id) ? model.id : model.object_id }), permission=#{permission}) =>  #{access || 'denied'} #{rule}")
    end
  end
  access
end
path_access?(login_context, path, method = :get) click to toggle source

Pruefen Zugriff fuer eine Web-action @param login_context Login-Contex, für den der Zugriff geprüft werden soll (muss Methode has_role? haben) @param path Pfad der Webresource (String) @param method http-Methode (:get, :put, :delete, :post), default ist :get

# File lib/tuersteher.rb, line 201
def path_access?(login_context, path, method = :get)
  rule = AccessRulesStorage.instance.path_rules.detect do |r|
    r.fired?(path, method, login_context)
  end
  if Tuersteher::TLogger.logger.debug?
    if rule.nil?
      s = 'denied'
    else
      s = "fired with #{rule}"
    end
    lc_id = login_context && login_context.respond_to?(:id) ? login_context.id : login_context.object_id
    Tuersteher::TLogger.logger.debug("Tuersteher: path_access?(login_context.id=#{lc_id}, path=#{path}, method=#{method})  =>  #{s}")
  end
  !(rule.nil? || rule.deny?)
end
purge_collection(login_context, collection, permission) click to toggle source

Bereinigen (entfernen) aller Objecte aus der angebenen Collection, wo der angegebene 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 250
def purge_collection login_context, collection, permission
  collection.select{|model| model_access?(login_context, model, permission)}
end