设计了在params中传递的current_user vs user_id,嵌套资源更新操作

时间:2016-10-08 23:11:54

标签: ruby-on-rails devise nested-resources

我正在使用Devise进行身份验证。我有两个模型,其中用户有一个配置文件和配置文件属于用户:

git config --global http.postBuffer 524288000

我正在使用嵌套资源,例如

class User < ActiveRecord::Base
  has_one :profile, dependent: :destroy 
end 

class Profile < ActiveRecord::Base
  belongs_to :user
end

要创建新的用户个人资料,我使用路由到resources :users do resource :profile end 等的前缀new_user_profile_path(current_user)

要更新用户个人资料,请执行以下操作

prifile#new

这感觉不对,因为我没有在个人资料# e.g. users/123/profile current_user.profile.update(profile_params) 中使用the user_id => 123。 我应该通过user_id找到用户个人资料,例如

params

此外,用户无法编辑其他用户的个人资料。

感谢您的反馈。

1 个答案:

答案 0 :(得分:1)

current_user.profile.update(profile_params)是更新当前用户的配置文件的可接受方式。

这也有助于保护配置文件不被其他用户编辑。如果您将用户ID基于从查询字符串传入的参数,那么这是不安全的,并且允许任何登录用户能够更新其他用户配置文件。

例如,使用具有访问权限的任何人都可以使用restful路径发布到/users/profiles/:id,即使它不是他们自己的ID。

current_user是User模型的一个实例,已包含user_id属性。