CanCan gem は保守されなくなりました。 CanCanCan や Pundit などの別の認証ライブラリを使用してください。
<img src=”https://fury-badge.herokuapp.com/rb/cancan.png” alt=”Gem バージョン” /> <img src=”https://secure.travis-ci.org/ryanb/ cancan.png?branch=master” /> <img src=”https://codeclimate.com/github/ryanb/cancan.png” />
ウィキ | RDocs |スクリーンキャスト
CanCan は、特定のユーザーがアクセスできるリソースを制限する Ruby on Rails の認可ライブラリです。すべての権限は 1 つの場所 ( Ability
クラス) で定義され、コントローラー、ビュー、データベース クエリ間で重複することはありません。
Rails 3では、これを Gemfile に追加し、 bundle
コマンドを実行します。
宝石「カンカン」
Rails 2では、これをenvironment.rbファイルに追加します。
構成。宝石「カンカン」
あるいは、プラグインとしてインストールすることもできます。
Rails プラグインのインストール git://github.com/ryanb/cancan.git
CanCan は、 current_user
メソッドがコントローラーに存在することを期待します。まず、何らかの認証 (Authlogic や Devise など) を設定します。別の動作が必要な場合は、「デフォルトの変更」を参照してください。
ユーザー権限はAbility
クラスで定義されます。 CanCan 1.5 には、このクラスを作成するための Rails 3 ジェネレーターが含まれています。
Rails G cancan:能力
Rails 2.3 では、次の内容を含む新しいクラスを「app/models/ability.rb」に追加するだけです。
クラスアビリティ CanCan ::能力を含む def初期化(ユーザー) 終わり 終わり
詳細については、「アビリティの定義」を参照してください。
現在のユーザーの権限は、 can?
使用して確認できます。 cannot?
ビューとコントローラーのメソッド。
できれば <%? :更新、@article %> <%= link_to "編集", edit_article_path(@article) %> <% 終了 %>
詳細については、「アビリティの確認」を参照してください。
authorize!
ユーザーが指定されたアクションを実行できない場合、コントローラーのメソッドは例外を発生させます。
デフショー @article =記事。 find ( params [ :id ]) 許可してください! :read 、 @article 終わり
すべてのアクションにこれを設定するのは面倒な場合があるため、RESTful スタイルのリソース コントローラーですべてのアクションを自動的に承認するために、 load_and_authorize_resource
メソッドが提供されています。 Before フィルターを使用してリソースをインスタンス変数にロードし、すべてのアクションに対してそれを認可します。
クラスArticlesController < ApplicationController ロードと認証リソース デフショー # @article はすでにロードされ、承認されています 終わり 終わり
詳細については、「コントローラー アクションの承認」を参照してください。
ユーザー認証が失敗すると、 CanCan::AccessDenied
例外が発生します。これをキャッチして、 ApplicationController
でその動作を変更できます。
クラスApplicationController < ActionController :: Base rescue_from CanCan :: AccessDenied do |例外| redirect_to root_url 、 :alert =>例外。メッセージ 終わり 終わり
詳細については、「例外処理」を参照してください。
アプリケーション内のすべてのアクションで認可が確実に行われるようにしたい場合は、ApplicationController にcheck_authorization
を追加します。
クラスApplicationController < ActionController :: Base check_authorization 終わり
アクションで認証が実行されない場合、例外が発生します。これをスキップしたい場合は、 skip_authorization_check
コントローラーのサブクラスに追加します。詳細については、「認証の確認」を参照してください。
1.6 へのアップグレード
能力の定義
能力の確認
コントローラアクションの認可
例外処理
デフォルトの変更
もっと見る
CanCan に関する問題があり、ドキュメントで解決策が見つからない場合は、GitHub に問題を追加するか、プロジェクトをフォークしてプル リクエストを送信してください。
仕様を実行するには、 bundle
呼び出してからrake
必要があります。詳細については、仕様/README を参照してください。
CanCan は、declarative_authorization と aegis からインスピレーションを受けました。また、CanCan の寄稿者に感謝します。完全なリストについては、CHANGELOG を参照してください。