在CanCan中是否可以根据日期属性范围来限制能力?

3
给定一个带有属性“日期”的Rails模型“Widget”,是否可以在CanCan操作授权上放置一个条件,要求日期晚于当前时间?文档展示了如何为数字属性指定范围。请参考文档
can :read, Project, :priority => 1..3

...但是对于另一种类型的开放范围(例如“>Time.now”),它的应用方式并不清晰:

can :some_action, Widget, :date => "????"
2个回答

1
你可以为条件定义一个代码块。
can :some_action, Widget do |widget|
  widget.date.to_time > Time.now
end

如果该块返回true,则用户具有该权限,否则将拒绝访问。
有关更多信息,请参阅this

谢谢!这个几乎可以直接使用,但是日期需要转换成时间才能与时间进行比较。我已经提出了一个反映这一点的编辑,并接受了答案。 - David Tresner-Kirsch

1
对于更高版本的Ruby(>= 2.6)和Rails,更好的解决方案是使用所谓的无限范围:
can :some_action, Widget, date: Date.current..

这仍然适用于CanCanCan的accessible_by操作,并且可以与其他can权限结合成必要的单个查询。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接