Das CanCan-Juwel wird nicht mehr gepflegt . Bitte verwenden Sie eine andere Autorisierungsbibliothek wie CanCanCan oder Pundit.
<img src=“https://fury-badge.herokuapp.com/rb/cancan.png“ alt=“Gem Version“ /> <img src=“https://secure.travis-ci.org/ryanb/ cancan.png?branch=master“ /> <img src=“https://codeclimate.com/github/ryanb/cancan.png“ />
Wiki | RDocs | Screencast
CanCan ist eine Autorisierungsbibliothek für Ruby on Rails, die einschränkt, auf welche Ressourcen ein bestimmter Benutzer zugreifen darf. Alle Berechtigungen werden an einem einzigen Ort (der Ability
-Klasse) definiert und nicht über Controller, Ansichten und Datenbankabfragen hinweg dupliziert.
Fügen Sie dies in Rails 3 zu Ihrer Gemfile hinzu und führen Sie den bundle
-Befehl aus.
Edelstein „Cancan“
Fügen Sie dies in Rails 2 Ihrer Datei „environment.rb“ hinzu.
config . Edelstein „Cancan“
Alternativ können Sie es auch als Plugin installieren.
Rails-Plugin installieren git://github.com/ryanb/cancan.git
CanCan erwartet, dass im Controller eine current_user
-Methode vorhanden ist. Richten Sie zunächst eine Authentifizierung ein (z. B. Authlogic oder Devise). Wenn Sie ein anderes Verhalten benötigen, lesen Sie Ändern der Standardeinstellungen.
Benutzerberechtigungen werden in einer Ability
-Klasse definiert. CanCan 1.5 enthält einen Rails-3-Generator zum Erstellen dieser Klasse.
Schienen g Cancan: Fähigkeit
Fügen Sie in Rails 2.3 einfach eine neue Klasse in „app/models/ability.rb“ mit folgendem Inhalt hinzu:
Klassenfähigkeit CanCan :: Fähigkeit einschließen def initialisieren ( Benutzer ) Ende Ende
Weitere Informationen finden Sie unter Definieren von Fähigkeiten.
Anschließend können die Berechtigungen des aktuellen Benutzers über die can?
überprüft werden. und cannot?
Methoden in der Ansicht und im Controller.
<% wenn möglich? :update, @article %> <%= link_to "Bearbeiten", edit_article_path(@article) %> <% Ende %>
Weitere Informationen finden Sie unter Fähigkeiten prüfen
Die authorize!
Die Methode im Controller löst eine Ausnahme aus, wenn der Benutzer die angegebene Aktion nicht ausführen kann.
auf jeden Fall zeigen @article = Artikel . find ( params [ :id ]) autorisieren! :lesen , @article Ende
Dies für jede Aktion festzulegen, kann mühsam sein. Daher wird die Methode load_and_authorize_resource
bereitgestellt, um alle Aktionen in einem Ressourcencontroller im RESTful-Stil automatisch zu autorisieren. Es wird einen Vorfilter verwenden, um die Ressource in eine Instanzvariable zu laden und sie für jede Aktion zu autorisieren.
Klasse ArticlesController < ApplicationController Load_and_authorize_resource auf jeden Fall zeigen # @article ist bereits geladen und autorisiert Ende Ende
Weitere Informationen finden Sie unter Autorisieren von Controller-Aktionen.
Wenn die Benutzerautorisierung fehlschlägt, wird eine CanCan::AccessDenied
-Ausnahme ausgelöst. Sie können dies abfangen und sein Verhalten im ApplicationController
ändern.
Klasse ApplicationController < ActionController :: Base Rescue_from CanCan :: AccessDenied do | Ausnahme | Redirect_to Root_url , :alert => Ausnahme . Nachricht Ende Ende
Weitere Informationen finden Sie unter Ausnahmebehandlung.
Wenn Sie sicherstellen möchten, dass bei jeder Aktion in Ihrer Anwendung eine Autorisierung erfolgt, fügen Sie check_authorization
zu Ihrem ApplicationController hinzu.
Klasse ApplicationController < ActionController :: Base check_authorization Ende
Dies löst eine Ausnahme aus, wenn in einer Aktion keine Autorisierung durchgeführt wird. Wenn Sie dies überspringen möchten, fügen Sie skip_authorization_check
zu einer Controller-Unterklasse hinzu. Weitere Informationen finden Sie unter Autorisierung sicherstellen.
Upgrade auf 1.6
Fähigkeiten definieren
Fähigkeiten prüfen
Autorisieren von Controller-Aktionen
Ausnahmebehandlung
Standardeinstellungen ändern
Mehr sehen
Wenn Sie Probleme mit CanCan haben, für die Sie in der Dokumentation keine Lösung finden, fügen Sie bitte ein Problem auf GitHub hinzu oder forken Sie das Projekt und senden Sie eine Pull-Anfrage.
Um die Spezifikationen zum Laufen zu bringen, sollten Sie bundle
und dann rake
aufrufen. Weitere Informationen finden Sie in der Spezifikation/README.
CanCan wurde von declarative_authorization und aegis inspiriert. Vielen Dank auch an die CanCan-Mitwirkenden. Die vollständige Liste finden Sie im CHANGELOG.