CanCan 2.0创建/更新授权

时间:2012-05-28 20:52:01

标签: ruby ruby-on-rails-3 cancan

根据我的理解,CanCan可以在加载时授权创建和更新操作,并在分配params散列时再次授权。

有没有办法用新的params哈希跳过第二次授权检查?这是导致问题的场景:

我有一个模型,可以在日期过去时阻止编辑(基本上,一旦日期过去,记录就会成为历史记录)。如果我编辑一个日期仍在将来的记录,并为其分配过去的日期,而不是对其进行验证处理,则阻止历史记录的能力会引发CanCan :: Unauthorized异常。这对可用性不利。有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望以后仅允许打开包含日期的记录进行编辑(edit操作,编辑表单),但能够执行update操作(保存表单)对于所有记录,即使是在参数中传递日期。

正确地说,你应该为editupdate行动写出不同的能力。像

can :edit, YourModel do |model|
  model.date > Date.today # something like this
end

can :update, YourModel

但是你需要使用这种方法添加额外的检查(可能在update动作中,或者在验证器中),因为任何人都可以通过手动发送请求来更改记录。

答案 1 :(得分:0)

我不知道你现在的情况如何,但我认为你可以这样做。

can :update, Model do |model|
  persisted_date = model.changes[:date].first
  persisted_date > Date.today 
end