只允许has_many关联的几个值

时间:2014-04-10 06:30:37

标签: ruby-on-rails checkbox authorization has-many

我的体育俱乐部主页由几个部门组成。 目前授权系统是通过使用cancan来实现的。

每个部门可以拥有多个用户,每个用户可以属于多个部门:

#department.rb

has_and_belongs_to_many :users

\ user.rb

has_and_belongs_to_many :departments

这非常有效。但我希望有可能在用户表单中管理此关联。我在每个部门都有一组复选框。这是通过这一行来实现的(使用simple_form):

<%= f.association :departments,
            :as => :check_boxes,
            :collection => Department.specific.order('name' => :asc),
            :label_method => :name,
            :value_method => :id %>

现在我只想允许更改多个值。在客户端,我可以通过简单地隐藏或禁用一些复选框来实现这一点。但是当我不再检查它时,这不是保存在服务器上。 复选框值将由一组id传输。在这个数组中操纵id很有可能。 在服务器端,我必须检查当前用户是否有权将用户分配给部门。当他没有权利时,我需要保持这种关联不变。

有没有一种优雅的方法来实现这一目标?

我正在使用具有强参数的Rails 4.0。

由于

1 个答案:

答案 0 :(得分:0)

所以你的问题基本上是关于server-side validation - 检查用户是否可以编辑服务器端的关联?

我开始考虑设置动态强大的参数,以便在模型工作时集成到模型中:

#app/controllers/your_controller.rb
def update
     @item = Model.find(params[:id])
     @params = (can? :update, @item) ? "" : "departments: []"
end

private

def controller_params
   params.require(:controller).permit(:attributes, @params.to_sym)
end