0

据我了解,CanCan 在加载时授权创建和更新操作,并在分配参数哈希时再次授权。

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

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

4

2 回答 2

0

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

edit可能,您应该为不同的能力和update行动编写不同的能力。喜欢

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

can :update, YourModel

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

于 2012-05-28T21:19:52.493 回答
0

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

can :update, Model do |model|
  persisted_date = model.changes[:date].first
  persisted_date > Date.today 
end
于 2012-05-28T21:34:47.590 回答