2017-07-08 204 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 

我的問題是:我們是否需要勾選「可以(?:破壞,@book)'? 根據我的理解,'load_and_authorize_resource'甚至不允許訪問此方法,如果我們沒有足夠的能力來銷燬它。

回答

1

喲不需要添加if can?(:destroy, @book)在你的行動,如果您使用load_and_authorize_resource

README

設置此爲每一個行動可能是乏味的,因此,提供自動授權load_and_authorize_resource方法REST風格資源控制器中的所有操作。

如果未經授權的用戶試圖摧毀,他得到一個未經授權的響應(不記得,如果是一個401碼)

也許你可以使用你的意見if can?(:destroy, @book),做到無顯示thte摧毀按鈕。同樣在Check Abilities & Authorization部分