Ruby 在 Rails CanCan Gem

Ruby on Rails CanCan Gem

我对 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

我的问题是:我们需要检查 'can?(:destroy, @book)' 吗? 据我了解,如果我们没有能力销毁它,'load_and_authorize_resource' 甚至不允许访问该方法。

如果您使用 load_and_authorize_resource

,您无需在操作中添加 if can?(:destroy, @book)

喜欢README

Setting this for every action can be tedious, therefore the load_and_authorize_resource method is provided to automatically authorize all actions in a RESTful style resource controller.

如果未经授权的用户试图破坏,他会得到未经授权的响应(不记得是否是 401 代码)

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