所以我根据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
答案 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?