Rails安全性 - 在模型级别实施所有权

时间:2014-04-18 15:56:17

标签: ruby-on-rails security model

我最近编写了一位朋友'能力与我的网站。它的工作方式是用户想要“朋友”。另一个用户,发送请求创建user_connection记录,其中原始用户设置在user_id,所请求的用户设置为contact_id。如果其他用户接受了请求,则将生成另一个user_connection记录,其中user_id和contact_id相反。如果两个user_connections都存在,则这两个用户被视为朋友。这当前使每个用户都可以访问两个用户之间共享的任何建筑物。

我想知道是否有某种方法可以强制执行我的user_connection模型,以确保创建记录的人被设置为user_id。否则,似乎有人可以欺骗user_connection创建请求以使自己成为他们想要的任何人的联系人,然后可以使用相同的方法欺骗构建共享。有没有内置的方法来防止这种情况?

我的第一个想法是让一个初始化程序始终将user_id设置为current_user的id,但看起来current_user不在模型的上下文中。

1 个答案:

答案 0 :(得分:1)

不要使用强参数将user_id作为参数提供。

所以,你可以创建这样的关系:

@friendship = current_user.friendships.new(contact_id: other_user.id)

还要确保为current_user提供正确的条件。

就是这样...... user_id是暗示但从未提供过。