Beherrschung der Autorisierung in Rails mit Pundit Gem

Beherrschung der Autorisierung in Rails mit Pundit Gem

Die Autorisierung ist eine wichtige Komponente jeder Webanwendung, die sicherstellt, dass Benutzer nur auf die Ressourcen zugreifen können, für die sie berechtigt sind. Pundit ist eine beliebte Autorisierungsbibliothek für Ruby on Rails, die es Entwicklern ermöglicht, feinkörnige Zugriffsregeln zu definieren. Dieser Artikel führt Sie durch die Verwendung des Pundit-Gems für die Autorisierung in einer Rails-Anwendung, mit einem Beispiel.

Schritt-für-Schritt-Anleitung 

1. Hinzufügen von Pundit zu Ihrer Rails-Anwendung

Fügen Sie zunächst Pundit zu Ihrem Gemfile hinzu und führen Sie bundle install aus:

Edelstein 'pundit'


Bundle-Installation

Als nächstes erzeugen Sie die Pundit-Installationsdateien:

Schienen erzeugen pundit:install

Dadurch wird eine application_policy.rb Datei im Verzeichnis app/policies, die als Standardrichtlinie für alle Modelle dient.

2. Festlegen von Politiken
Policies in Pundit sind Plain Old Ruby Objects (POROs), die die Autorisierungslogik kapseln. Jede Richtlinie entspricht einem Modell in Ihrer Anwendung. Betrachten wir ein einfaches Beispiel, bei dem wir ein Post-Modell haben und dafür Autorisierungsregeln definieren wollen.

Erstellen Sie eine Richtlinie für das Modell Post:

Schienen erzeugen pundit:policy post

Dies erzeugt eine post_policy.rb Datei im Verzeichnis app/policies.

3. Implementierung der Autorisierungslogik
Öffnen Sie die Datei post_policy.rb und definieren Sie die Autorisierungsregeln:

class PostPolicy < ApplicationPolicy
  def index?
    true
  end

  def show?
    true
  end

  def create?
    user.present?
  end

  def aktualisieren?
    user.present? && user == record.user
  end

  def destroy?
    user.present? && user == record.user
  end
end

Hier werden für jede Aktion (index?, show?, create?, update? und destroy?) entsprechende Methoden definiert. Diese Methoden geben je nach Benutzer und Datensatz, auf den zugegriffen wird, true oder false zurück.

4. Verwendung von Richtlinien in Controllern
In Ihren Controllern können Sie Pundit verwenden, um Aktionen zu autorisieren. Fügen Sie zunächst das Pundit-Modul in den ApplicationController ein:

Klasse ApplicationController < ActionController::Base
umfassen Pundit
Ende

Verwenden Sie dann die authorize-Methode, um die Autorisierung in Ihrem PostsController zu überprüfen:

Klasse PostsController < AnwendungsController
  before_action :authenticate_user!
  before_action :set_post, only: [:show, :edit, :update, :destroy]

  def index
    @posts = Post.all
    authorize @posts
  end

  def zeigen
  end

  def neu
    @post = Post.new
    autorisieren @post
  end

  def erstellen
    @post = current_user.posts.build(post_params)
    authorize @post
    if @post.save
      redirect_to @post, notice: 'Beitrag wurde erfolgreich erstellt.'
    else
      render :new
    end
  end

  def bearbeiten
    autorisieren @post
  end

  def aktualisieren
    authorize @post
    if @post.update(post_params)
      redirect_to @post, notice: 'Beitrag wurde erfolgreich aktualisiert.'
    else
      render :edit
    end
  end

  def zerstören
    autorisiere @post
    @post.destroy
    redirect_to posts_url, notice: 'Beitrag wurde erfolgreich zerstört.'
  end

  privat

  def set_post
    @post = Post.find(params[:id])
  end

  def post_params
    params.require(:post).permit(:title, :body)
  end
end

In diesem Controller verwenden wir authorize, um die Berechtigungen zu prüfen, bevor wir eine Aktion durchführen.

5. Umgang mit unberechtigtem Zugriff
Pundit löst einen Pundit::NotAuthorizedError aus, wenn ein Benutzer nicht berechtigt ist, eine Aktion durchzuführen. Sie können diesen Fehler global im ApplicationController behandeln:

Klasse ApplicationController < ActionController::Base
  include Pundit

  rescue_from Pundit::NotAuthorizedError, mit: :user_not_authorized

  private

  def benutzer_nicht_autorisiert
    flash[:alert] = "Sie sind nicht berechtigt, diese Aktion durchzuführen."
    redirect_to(request.referrer || root_path)
  end
end

Wenn ein Benutzer versucht, eine nicht autorisierte Aktion durchzuführen, wird er mit einer Fehlermeldung weitergeleitet.

Abschluss

Die Verwendung von Pundit für die Autorisierung in Rails ist eine leistungsstarke und flexible Möglichkeit, den Zugriff auf Ressourcen in Ihrer Anwendung zu kontrollieren. Durch die Definition von Richtlinien und deren Verwendung in Ihren Controllern können Sie sicherstellen, dass Benutzer nur Aktionen ausführen können, für die sie berechtigt sind. Hier wurden die Grundlagen behandelt, aber Pundit unterstützt auch komplexere Szenarien, einschließlich Scopes und benutzerdefinierte Richtliniengeneratoren.

Ausführlichere Informationen finden Sie in der Pundit GitHub-Repository

zusammenhängende Posts

Über den Autor des Beitrags

Hinterlasse einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert


de_DEGerman