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