開発者ガイド| rdocs |スクリーンキャスト1 |スクリーンキャスト2
Cancancanは、Ruby and Ruby on Railsの認可ライブラリであり、特定のユーザーがアクセスできるリソースを制限しています。
すべてのアクセス許可は、1つまたは複数の機能ファイルで定義でき、コントローラー、ビュー、およびデータベースクエリ間で複製されていないため、許可ロジックを1つの場所に保ち、メンテナンスとテストを簡単に保つことができます。
2つの主要な部分で構成されています。
さまざまなオブジェクトにアクセスするルールを定義でき、ヘルパーがそれらのアクセス許可を確認するためのヘルパーを提供できる承認ライブラリ。
Railsヘルパーは、モデルの権限の読み込みとチェックを自動的に実行し、重複したコードを削減することにより、Railsコントローラーのコードを簡素化します。
Cancancanをスポンサーし、ここにロゴを見せたいですか?スポンサーページを確認してください。
完全な開発者ガイドにアクセスして、Cancancanを詳細に使用する方法を学びましょう。
これをgemfileに追加します:
gem 'cancancan'
bundle install
コマンドを実行します。
ユーザー許可は、 Ability
クラスで定義されます。
rails g cancan:ability
ここでは、投稿モデルを読み取るために定義されたルールの例に従います。
class Ability
include CanCan :: Ability
def initialize ( user )
can :read , Post , public : true
return unless user . present? # additional permissions for logged in users (they can read their own posts)
can :read , Post , user : user
return unless user . admin? # additional permissions for administrators
can :read , Post
end
end
現在のユーザーのアクセス許可は、 can?
そしてcannot?
ビューとコントローラーの方法。
<% if can? :read, @post %>
<%= link_to "View", @post %>
<% end %>
他の認証ライブラリと比較して、Cancancanの重要な機能の1つは、ユーザーがアクセスすることが許可されているすべてのオブジェクトを取得する可能性です。次の:
@posts = Post . accessible_by ( current_ability )
ルールを使用して、ユーザーが読み取ることができる投稿のリストのみを取得できるようにします。
authorize!
ユーザーが指定されたアクションを実行できない場合、コントローラー内のメソッドは例外を提起します。
def show
@post = Post . find ( params [ :id ] )
authorize! :read , @post
end
すべてのアクションにこれを設定することは退屈です。したがって、 load_and_authorize_resource
メソッドが提供され、Restfulスタイルのリソースコントローラーですべてのアクションを自動的に承認します。アクション前のアクションを使用して、リソースをインスタンス変数にロードし、すべてのアクションに対して承認します。
class PostsController < ApplicationController
load_and_authorize_resource
def show
# @post is already loaded and authorized
end
def index
# @posts is already loaded with all posts the user is authorized to read
end
end
完全な開発者ガイドにアクセスして、Cancancanを詳細に使用する方法を学びましょう。
ドキュメントで解決策を見つけることができないカンカンに関する質問や疑問がある場合は、タグCancancanを使用してStackoverflowに関する質問を開いてください
バグが見つかった場合は、GitHubに問題を追加するか、プロジェクトをフォークしてプルリクエストを送信してください。
Cancancanは、評価を使用して、レールの複数のバージョンと異なるモデルアダプターに対してコードベースをテストします。
最初に開発するときは、 bundle install
実行してから、異なるセットをインストールするには、 bundle exec appraisal install
必要があります。
その後、 appraisal rake
ですべての評価ファイル(CIのように)を実行するか、特定のセットDB='sqlite' bundle exec appraisal activerecord_5.2.2 rake
を実行することができます。
特定のファイルまたはフォルダー内で特定のテストセットを実行したい場合は、 DB='sqlite' SPEC=path/to/file/or/folder bundle exec appraisal activerecord_5.2.2 rake
を使用できます。
Rubymineを使用する場合、RSPEC構成テンプレートをこのように構成することにより、RSPECテストを実行できます。
詳細については、貢献を参照してください。
スポンサーとすべてのカンカンの貢献者に感謝します。完全なリストについては、Changelogを参照してください。