这似乎应该相当简单,因为它需要很多.我检查用户是否登录正常,但一旦用户登录,他们可能会改变其他人的帐户.例如:说ID为1的用户已登录,他们将/ users / 2 / edit作为url.这将向他们显示用户2s数据并允许他们修改它.当然我可以改变控制器中的编辑动作来使用这样的东西……
def edit @user = User.find(current_user.id) end
其中current_user在控制器中设置,所以用户总是那个登录的人.如果你只有几个控制器有几个动作,这很好,但如果你有很多,可能会很痛苦.似乎应该有一种方法来全局限制,因此用户只能更新自己的数据,无论他们使用什么操作或控制器.
有没有办法将用户限制为所有操作的数据?
解决方法
我认为你的问题实际上是关于如何进行授权.此外,我怀疑您可能会将“belongs_to”模型关联名称与授权混为一谈. “belongs_to”关联名称描述了一个模型与另一个模型的关系,但它并不暗示应用程序如何控制对任何模型的访问.
Hishalv是正确的,使用控制器过滤器是管理授权的正确方法.这是正确的MVC方式.给Rails Guide一个很好的阅读,让你明白.
然后,您可以考虑使用像CanCan这样的授权宝石,或根据Hishalv的建议滚动自己的宝石. CanCan与Devise等认证宝石一起运作良好.如果你自己动手,那么在ApplicationController中放一个辅助方法并以一种无论模型如何工作的方式编写它都是一件简单的事情.