问题是我有两个模型 - 项目和故障单(属于项目)。我希望在项目到期时拒绝创建故障单(即我希望用户无法为过期项目创建新故障单)。
如何拒绝在CanCan Ability中为用户创建故障单? 像
这样的东西if user.role? :superuser
can :read, :all
can :create, Ticket do |ticket|
ticket.project.expired?
end
end
问题是“项目”方法没有在任何地方定义。 我非常感谢你的帮助。
答案 0 :(得分:2)
您只需在授予权限之前测试潜在故障单的项目是否已过期。关键是要对项目授予许可,而不是票证。
为此,我可能会定义一种特殊能力......
if user.role? :superuser
can :read, :all
can :create_ticket_for_project, Project do |project|
!project.expired?
end
end
然后在你的控制器中使用它:
authorize! :create_ticket_for_project, @project