我对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'如果我们没有能力摧毁它,我们甚至不会允许使用这种方法。
答案 0 :(得分:1)
如果您使用if can?(:destroy, @book)
load_and_authorize_resource
就像README说
一样为每个操作设置此操作可能很繁琐,因此提供了load_and_authorize_resource方法来自动授权RESTful样式资源控制器中的所有操作。
如果未经授权的用户试图销毁,他会收到未经授权的回复(不记得是否是401代码)
也许你可以在你的视图中使用if can?(:destroy, @book)
,不要显示破坏按钮。同样在Check Abilities & Authorization部分