2017-07-08 3 views
1

CanCan Gemについて少し混乱しています。私は基本的にabillity.rbを設定する方法を理解しています。Ruby on Rails CanCan Gem

// in abillity.rb 

user ||= User.new 

can [:update, :destroy, :edit, :read], Book do |book| 
    book.dashboard.user_id == user.id 
end 

そして、我々は次の本コントローラを持って言うことができます::

// books_controller.rb 
load_and_authorize_resource 

def destroy 
    if can?(:destroy, @book) 
    @book.destroy! 
    redirect_to happy_world_path 
    else 
    redirect_to not_happy 
    end 
end 

私の質問です:?我々は(」することができますチェックする必要があります:破壊たとえばないように、我々は次のコードを持っていると言います、 @本)'? わたしの理解から、load_and_authorize_resourceは、それを破壊する能力がなければこのメソッドへのアクセスを許可しません。

答えて

1

ヨのでload_and_authorize_resourceメソッドが自動的に認可するために提供され、すべてのアクションのためにこれを設定すると、退屈することができ

を言うあなたはREADME同様load_and_authorize_resource

を使用する場合は、あなたの行動にif can?(:destroy, @book)を追加する必要はありませんRESTfulスタイルのリソースコントローラ内のすべてのアクション。

の権限を持たないユーザーは、破壊しようとすると、彼は不正レスポンス(401コードがある場合は覚えていない)

たぶん、あなたは何のショーthteボタンを破壊しないように、あなたの意見でif can?(:destroy, @book)を使用することができますを取得します。 Check Abilities & Authorizationセクションのように