在spree中添加供应商产品时授权失败

时间:2015-10-31 12:52:23

标签: ruby-on-rails cancan spree spree-auth-devise

您好我尝试使用供应商登录在spree中添加产品。我有两个与spree marketplace安装相关的宝石

gem 'spree_drop_ship', github: 'spree-contrib/spree_drop_ship', branch: '3-0-stable'
gem 'spree_marketplace', github: 'firman/spree_marketplace'

此外,我更新了我的能力装饰器,以使用

提供相关权限
if user.has_spree_role? "supplier"
        can [:admin, :manage, :index, :create, :update], Spree::Product do |product|
          product.supplier_ids.include?(user.supplier_id)
        end
end

我可以看到添加产品的表单,但是当我添加基本产品详细信息并点击“创建”时,它会给我Authorization Failure错误 请建议我该怎么做才能解决这个问题。

更新:我调试了应用程序并发现有一些迁移文件丢失,当我迁移数据库时,我可以在spree_products中看到supplier_id列,但是当我使用供应商登录添加新产品时,同样的错误被抛出为未经授权,我检查了数据库,supplier_id列为NULL

我应该在哪里进行更改,以便在spree_products中存储正确的供应商ID

1 个答案:

答案 0 :(得分:0)

产品已创建但未与供应商关联,因此在编辑时引发授权失败,因为该产品没有供应商。

您正在使用3-0-stable分支,并且该分支缺少重要方法。请参阅2-4-stable分支并将add_product_to_supplier方法复制到Spree :: Admin :: ProductsControllers。

Spree::Admin::ProductsController.class_eval do
  create.after :add_product_to_supplier

  # Newly added products by a Supplier are associated with it.
  def add_product_to_supplier
    if try_spree_current_user && try_spree_current_user.supplier?
      @product.add_supplier!(try_spree_current_user.supplier_id)
    end
  end
end