如何限制用户使用 CanCanCan 更新某些字段?
How to restrict a user from updating certain fields with CanCanCan?
所以如果我有一个用户,他可以 create/update 他的服务,但他不能 :publish(bool) 他们,从 update_params 跳过这个字段的最佳解决方案是什么哈希?
我发现了 this 类似的问题,但它链接到从未发布的 CanCan 2.0,我想知道是否有办法使用 CanCanCan 解决这个问题,但在他们的文档中找不到任何内容.非常感谢!
据我所知你不能。我会有一个单独的发布操作。所以我会完全省略表单和 service_params
中的 publish。
然后我会这样做:
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
因此,如果他们不是管理员,您将从参数中省略它。在这种情况下,您可能希望隐藏视图中的字段,具体取决于它们是否可以更改字段。
所以如果我有一个用户,他可以 create/update 他的服务,但他不能 :publish(bool) 他们,从 update_params 跳过这个字段的最佳解决方案是什么哈希?
我发现了 this 类似的问题,但它链接到从未发布的 CanCan 2.0,我想知道是否有办法使用 CanCanCan 解决这个问题,但在他们的文档中找不到任何内容.非常感谢!
据我所知你不能。我会有一个单独的发布操作。所以我会完全省略表单和 service_params
中的 publish。
然后我会这样做:
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
因此,如果他们不是管理员,您将从参数中省略它。在这种情况下,您可能希望隐藏视图中的字段,具体取决于它们是否可以更改字段。