如何限制用户使用CanCanCan更新某些字段?

时间:2015-02-10 11:35:20

标签: ruby-on-rails ruby-on-rails-4 cancancan

所以,如果我有一个用户,他可以创建/更新他的服务,但他不能:发布(bool)他们,从update_params哈希中跳过这个字段的最佳解决方案是什么?

我发现了this类似的问题,但它链接到从未发布的CanCan 2.0,我想知道是否有办法使用CanCanCan解决这个问题,但在他们的文档中找不到任何内容。非常感谢!

1 个答案:

答案 0 :(得分:1)

据我所知,你不能。我会有一个单独的发布行动。所以我省略了表单中的发布和service_params完全发布。

然后我会做这样的事情:

Class ServicesController

  def publish
    @service = Service.find(params[:id])  
    @service.update_column(:publish, true)
  end

end

然后才能

can :manage, Service
cannot :publish, Service

或者你可以这样做(假设你有一个当前用户,并将其定义为管理员)

def service_params
  if current_user.admin?
    params.require(:service).permit(:my_field, :publish)
  else
    params.require(:service).permit(:my_field)
  end
end

如果他们不是管理员,那么您可以从参数中省略它。在这种情况下,您可能希望隐藏视图中的字段,具体取决于他们是否可以更改字段。