【问题标题】:How to restrict a user from updating certain fields with CanCanCan?如何限制用户使用 CanCanCan 更新某些字段?
【发布时间】:2015-02-10 11:35:19
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案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
    

    因此,如果他们不是管理员,您将在参数中省略它。在这种情况下,您可能希望根据它们是否可以更改字段来隐藏视图中的字段。

    【讨论】:

    • 在执行像服务更新这样的简单任务时,这将需要存在两个表单,甚至需要两个不同的页面。如果我想使用一种形式怎么办?
    • 不,它不会,您只需要在字段周围使用 if 语句。例如if current_user.admin?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 2021-09-04
    相关资源
    最近更新 更多