Log*_*man 7 ruby-on-rails strong-parameters ruby-on-rails-4 pundit
我有一个has_many关联的多选框.params进来如下:
foo_ids: ["1", "2", "3"]
Run Code Online (Sandbox Code Playgroud)
使用强参数,我不允许这个属性,因为我想自己授权,所以人们不能只是把它们想要的东西放进去.
def update
bar.foos = authorized_foos
bar.update(baz_params)
respond_with bar
end
private
def authorized_foos
foos = Foo.find(params[:baz][:foo_ids])
foos.each do |foo|
authorize foo, :manage?
end
end
Run Code Online (Sandbox Code Playgroud)
这种方法将迫使我找到所有的foos,循环遍历它们,并单独授权每个foos.是否有更简单的方法来管理has_many授权,最好是使用Pundit gem?
最简单的方法是循环。迭代用户数组中的每个用户并对每个用户进行授权。例如,
users_id_array = [1,2,3,4,5,6]
private
def authorized_users
users = User.find(params[:group][:user_ids])
users.each { |u| authorize u, :manage? }
...
end
Run Code Online (Sandbox Code Playgroud)
所以这是最基本、最简单的答案。