Ruby on Rails CanCan Gem

时间:2017-07-08 22:42:13

标签: ruby-on-rails ruby-on-rails-5 cancan cancancan

我对CanCan Gem有点困惑。我基本上了解如何设置abillity.rb。例如,我们要说有以下代码:

// 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

我的问题是:我们需要检查一下吗?(:destroy,@ book)'? 根据我的理解' load_and_authorize_resource'如果我们没有能力摧毁它,我们甚至不会允许使用这种方法。

1 个答案:

答案 0 :(得分:1)

如果您使用if can?(:destroy, @book)

,则不需要在操作中添加load_and_authorize_resource

就像README

一样
  

为每个操作设置此操作可能很繁琐,因此提供了load_and_authorize_resource方法来自动授权RESTful样式资源控制器中的所有操作。

如果未经授权的用户试图销毁,他会收到未经授权的回复(不记得是否是401代码)

也许你可以在你的视图中使用if can?(:destroy, @book),不要显示破坏按钮。同样在Check Abilities & Authorization部分