Leserecht veröffentlichter Dateien auswerten

Mit CMS Fiona können Leserechte auf veröffentliche Dateien vergeben werden, um zu steuern, welche Benutzer zu welchen Bereichen des Auftritts Zugang haben. Diese Rechte werden Benutzergruppen erteilt, die auch mit dem Rails Connector ausgelesen werden können, um sie auszuwerten.

Zugriff auf geschützte Dateien steuern

Wenn bei einem CMS-Objekt gesonderte Leserechte für die freigegebenen Inhalte vergeben wurden, so sperrt der Rails Connector diese Inhalte automatisch in Abhängigkeit von den Gruppenmitgliedschaften des betreffenden Besuchers. Beim Abruf gesperrter Inhalte antwortet die Rails-Applikation mit einer 403-Fehlerseite.

Um dieses Verhalten zu ändern, können Sie die Methode, die die Prüfung durchführt, überschreiben. Diese Methode ist für alle Obj-Modelle, also alle Objektklassen gemeinsam definiert:

# app/models/obj.rb

class Obj < RailsConnector::BasicObj

  def permitted_for_user?(user)
    is_editable = RailsConnector::Configuration.mode == :editor
    return true if is_editable or (permissions.live & user.groups).size > 0
    return false
  end

end

Im obigen Beispiel wird geprüft, ob wenigstens eine der Gruppen des Benutzers (die mit Ihrem eigenen Benutzermanagement verwaltet werden) in der Liste der Live-Leserecht-Gruppen (permissions.live) des betreffenden CMS-Objekts enthalten ist. Daher muss user.groups Ihrem User-Modell entsprechend implementiert werden.

Bitte beachten Sie, dass abhängig vom Modus des Rails Connectors unterschiedliche Gruppen ausgeliefert werden.

  • Im Modus editor sind mit den Objektinstanzmethoden read, write , root, und create_children die Gruppenlisten für das Lese-, Schreib-, Administrationsrecht sowie das Recht, Unterobjekte anzulegen, abfragbar.
  • Im Modus normal kann mit live die Liste der Gruppen abgefragt werden, die das Live-Leserecht für das Objekt haben.

Authentifizierung der Benutzer

Der Rails Connector bietet keine Funktionalität für die Authentifizierung von Benutzern. Diese Funktionalität kann mit Hilfe eines der zahlreichen öffentlich verfügbaren Gems realisiert werden. Der Rails Connector enthält jedoch ein Interface, über das ein Benutzer-Modell der Applikation bekannt gemacht werden kann. Überschreiben Sie hiefür die folgenden Methoden:

# app/controller/application_controller.rb

class ApplicationController < ActionController::Base

  def current_user
    return User.from_session(session[:user]) if session[:user]
  end
  
  def logged_in?
    return current_user.nil?
  end
  
  def admin?
    return current_user.admin?
  end

end