Ruby on rails 3 Rails 3-控制器中与当前用户相关的模型

Ruby on rails 3 Rails 3-控制器中与当前用户相关的模型,ruby-on-rails-3,authentication,model-view-controller,relationship,Ruby On Rails 3,Authentication,Model View Controller,Relationship,我们假设设置了身份验证系统,并且可以访问变量当前用户,例如:使用Desive gem 我们有两个模型,用户和东西,用户有一个东西。 在控制器中,如果我们假设用户只能创建/删除他自己的对象,那么为了获得正确的创建/删除对象,最好的做法是什么 例如创造行动 备选案文1(标准): 我们在视图中设置了用户id 备选案文2: @thing = current_user.create_thing 我们不需要在视图中设置用户id 这两种方法都有效,但我想知道一种方法是必须避免还是更好,以及为什么。 谢谢 我

我们假设设置了身份验证系统,并且可以访问变量
当前用户
,例如:使用Desive gem

我们有两个模型,
用户
东西
用户有一个东西
。 在控制器中,如果我们假设
用户只能创建/删除他自己的
对象
,那么为了获得正确的创建/删除对象,最好的做法是什么

例如创造行动

备选案文1(标准):

我们在视图中设置了用户id

备选案文2:

@thing = current_user.create_thing
我们不需要在视图中设置用户id

这两种方法都有效,但我想知道一种方法是必须避免还是更好,以及为什么。
谢谢

我个人认为第二个选项更好,因为(如你所说)你不必乱动用户id(无论是在视图中还是在控制器中)。

我个人认为第二个选项更好,因为(如你所说)你不必乱动用户id(既不在视图中,也不在控制器内).

第一个选项只有在您希望允许用户为自己以外的其他用户设置内容时才有用。如果您不希望这样做,第一个选项甚至会引入一个可能的漏洞。恶意用户可以尝试利用视图中的
user\u id
字段进行攻击。因此,假设用户只能设置自己的内容:绝对选择离子2。

第一个选项只有在您希望允许用户为自己以外的其他用户设置内容时才有用。如果您不想允许,第一个选项甚至会引入一个可能的漏洞。恶意用户可以尝试利用视图中的
user\u id
字段。因此,假设用户只能设置自己的内容:definitely选项2。

如果您使用Deave gem,与当前用户一起玩会更好。这将比传递用户id更安全。

如果您使用Deave gem,与当前用户一起玩会更好。这将比传递用户id更安全。

谢谢,我也这么想,我现在肯定了!谢谢,我也这么想,我很高兴我现在确定了!是的,但你基本上说的都是一样的,除了漏洞信息,这对我来说是另一个话题:)我使用授权来解决这个问题。但愿我能投你们两个的票@AlrickDeillon,你问哪个更好,为什么。莫里茨没有给出任何理由(除了显而易见的理由),所以我认为我的答案基本上是不一样的。无论如何,我不是想说服你改变被接受的答案(请不要)。我只是开玩笑,因为你说的是“最老的”而不是“最好的”。我同意,下次我会想得更好;)是的,但你基本上说的都是一样的,除了漏洞信息,这对我来说是另一个话题:)我使用授权来解决这个问题。但愿我能投你们两个的票@AlrickDeillon,你问哪个更好,为什么。莫里茨没有给出任何理由(除了显而易见的理由),所以我认为我的答案基本上是不一样的。无论如何,我不是想说服你改变被接受的答案(请不要)。我只是开玩笑,因为你说的是“最老的”而不是“最好的”。我同意,下次我会想得更好;)
@thing = current_user.create_thing