根据我的理解,CanCan可以在加载时授权创建和更新操作,并在分配params散列时再次授权。
有没有办法用新的params哈希跳过第二次授权检查?这是导致问题的场景:
我有一个模型,可以在日期过去时阻止编辑(基本上,一旦日期过去,记录就会成为历史记录)。如果我编辑一个日期仍在将来的记录,并为其分配过去的日期,而不是对其进行验证处理,则阻止历史记录的能力会引发CanCan :: Unauthorized异常。这对可用性不利。有办法解决这个问题吗?
答案 0 :(得分:0)
如果我理解正确,您希望以后仅允许打开包含日期的记录进行编辑(edit
操作,编辑表单),但能够执行update
操作(保存表单)对于所有记录,即使是在参数中传递日期。
正确地说,你应该为edit
和update
行动写出不同的能力。像
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