我有一个用于has_many关联的多选框。参数的形式为:
foo_ids: ["1", "2", "3"]使用强参数,我不允许这个属性,因为我想自己授权它,这样人们就不能在里面放任何他们想要的东西。
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这种方法将迫使我找到所有foo,遍历它们,并分别对每个foo进行授权。有没有一种更简单的方法来管理has_many授权,最好是使用Pundit gem?
发布于 2015-01-28 01:29:13
最简单的方法是循环。遍历用户数组中的每个用户,并授权每个用户。例如,
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所以这是最基本和最简单的答案。
发布于 2017-05-13 01:16:24
我做了类似的事情。由于你提供的信息太少,我将做一系列假设。
因此,我们需要做的工作如下:
@foo.users返回users@user.foos的集合返回foos的集合
通过设置模型来支持上面的操作,这比你想象的要容易得多。
class FooPolicy < ApplicationPolicy
class Scope < Scope
def resolve
user.foos
end
end
end我觉得你忽略了专家的意思。Pundit允许您逐个用户地进行授权。因此,上面的代码将用户的范围限定为他们所属的组(在本例中为foos)。
https://stackoverflow.com/questions/18338731
复制相似问题