我最近在我的 Rails 应用程序中使用了两个很棒的 gem,state_machine 和 cancan,但我很好奇将它们干净地集成的最佳方法。目前,我已经在按钮上放置了状态转换,这些按钮可以执行控制器授权的操作。这非常有效,我可以限制谁可以执行该操作。
我也想让用户能够在编辑表单中更改对象状态。我注意到 state_machine 将获取散列中的 state_event 键,以及要执行的操作的值(因此它将通过所有 state_machines 回调)。这可以通过 update_attributes 中的 params 散列传递。极好的。
但是,只有某些用户才能将对象更改为某些状态。我将如何实现这一点?这个想法是
params['state_event']=='move_to_x'
应该为某些用户提供救助,但允许其他用户。这也让我担心,因为在我实施之前,这是一个聪明的用户可以在状态事件中发布任何内容的授权部分,即使他们也不应该被允许!