Rails与运营商从头开始授权

时间:2016-01-31 17:01:45

标签: ruby-on-rails ruby authorization cancan

所以我根据Ryan Bates'从头开始授权。 railscast。

我认为我面临的问题是这部分代码

action == 'create' || action == 'update'

我想说的是,如果操作是create或操作是update(所以其中任何一个)和obj.has_accepted_acceptance?它应该返回false,但它返回true,除非我消除|| action == 'update'部分代码。只有这样才能按预期工作。

运营商的问题是什么? 提前感谢您的时间!

class Permission < Struct.new(:user)

  def allow?(controller, action, obj = nil)
    if controller == "acceptances"
      if action == 'create' || action == 'update' && obj.has_accepted_acceptance?
        return false
      end
    end
    return true 
  end
end

2 个答案:

答案 0 :(得分:3)

尝试分组您的条件:

if (action == 'create' || action == 'update') && obj.has_accepted_acceptance?

答案 1 :(得分:1)

您可以使用ActiveSupport .in?将第一个从两个子句转换为一个:

if action.in?(%w[create update]) && obj.has_accepted_acceptance?

普通老红宝石也是如此:

if %w[create update].includes?(action) && obj.has_accepted_acceptance?