据我了解,CanCan 在加载时授权创建和更新操作,并在分配参数哈希时再次授权。
有没有办法使用新的参数哈希跳过第二次授权检查?这是导致问题的场景:
我有模型在日期过去时阻止编辑(基本上,一旦日期过去,记录就会成为历史)。如果我编辑一个日期仍在未来的记录,并为其分配一个过去的日期,而不是让验证处理它,阻止历史记录的能力会引发 CanCan::Unauthorized 异常。这对可用性不利。有没有解决的办法?
据我了解,CanCan 在加载时授权创建和更新操作,并在分配参数哈希时再次授权。
有没有办法使用新的参数哈希跳过第二次授权检查?这是导致问题的场景:
我有模型在日期过去时阻止编辑(基本上,一旦日期过去,记录就会成为历史)。如果我编辑一个日期仍在未来的记录,并为其分配一个过去的日期,而不是让验证处理它,阻止历史记录的能力会引发 CanCan::Unauthorized 异常。这对可用性不利。有没有解决的办法?
如果我理解正确,您希望只允许打开具有将来日期的记录以进行编辑(edit
操作,编辑表单),但能够update
对所有记录执行操作(保存表单),即使参数中已传递日期。
edit
可能,您应该为不同的能力和update
行动编写不同的能力。喜欢
can :edit, YourModel do |model|
model.date > Date.today # something like this
end
can :update, YourModel
但是您需要使用这种方法添加额外的检查(在update
操作中,可能是在验证器中),因为任何人都可以通过发送由手动发布请求生成的发送来更改记录。
我不知道你现在的情况如何,但我认为你可以做这样的事情。
can :update, Model do |model|
persisted_date = model.changes[:date].first
persisted_date > Date.today
end