我有一个多态模型 TimeReport。您可以将内部 TimeReport 或 TimeReports 与项目关联。但是,如果您有与项目关联的 TimeReport,则只能将其与您所属的项目关联。
那么,我怎么会CanCan呢?我真的做不到
can :create, TimeReport, project_id: user.project_ids
正如我从一开始就想要的那样。有什么建议吗?(我当然可以在模型验证规则中这样做,但我宁愿不这样做,除非有充分的理由。)
我有一个多态模型 TimeReport。您可以将内部 TimeReport 或 TimeReports 与项目关联。但是,如果您有与项目关联的 TimeReport,则只能将其与您所属的项目关联。
那么,我怎么会CanCan呢?我真的做不到
can :create, TimeReport, project_id: user.project_ids
正如我从一开始就想要的那样。有什么建议吗?(我当然可以在模型验证规则中这样做,但我宁愿不这样做,除非有充分的理由。)
您可能需要提供更多信息才能获得好的答案...您说 time_report 与项目相关联,这意味着time_report.project
存在吗?
在您的控制器中:
@time_report = TimeReport.new # or whatever
authorize! :create, @time_report
在能力:
can [ :create ], TimeReport do |time_report|
user.project_ids.include? time_report.project_id
end
请注意以下事项:
您可能无法使用 load_and_authorize_resource,但也许可以。我倾向于不使用它,但如果 @time_report 正是您需要的,那么它会奏效。
在您的能力中time_report
传递的变量与您的控制器中的变量相同。这就是使 CanCan 变得美丽的原因;)can()
@time_report