【问题标题】:Ruby on Rails CanCan GemRuby on Rails CanCan Gem
【发布时间】:2017-07-08 22:42:12
【问题描述】:

我对 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' 甚至不会允许访问此方法。

【问题讨论】:

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


    【解决方案1】:

    如果您使用load_and_authorize_resource,则无需在您的操作中添加if can?(:destroy, @book)

    喜欢README

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      • 2017-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多