在rails_admin中使用cancan基于授权从列表中隐藏产品



我有一个Product模型。

Ability等级如下:

class Ability
  include CanCan::Ability
  def initialize(user)
    if user.has_role? :super_admin
      can :manage, :all
    else
      can :read, Product, Product.all.limit(10) if user.has_role? :brand_manager
      can :access, :rails_admin   # grant access to rails_admin
      can :dashboard              # grant access to the dashboard
    end
  end
end

以下是rails_admin的代码:

RailsAdmin.config do |config|
  config.authorize_with :cancan
 end

我想从列表中隐藏所有没有特定nameproducts ?有些rails_admin不支持它。有人能帮我解决这个问题吗?

您可以这样做。1. 在模型中创建一个新的字段,如admin_user_id2. 在从产品数据中保存当前管理员用户详细信息创建/更新产品时并使用它的能力类

class Ability
include CanCan::Ability
 def initialize(user)
   if user.has_role? :super_admin
     can :manage, :all
   elsif user.has_role? :brand_manager
     can :manage,Product, :admin_user_id=> user.id
     can :access, :rails_admin   # grant access to rails_admin
     can :dashboard              # grant access to the dashboard
   end
  end
end

你说的hide all the producs from the list是什么意思?

如果你想让用户看不懂,你可以试试:

can :read, Product do |product|
  [name1, name2].include?( product.name )
end

如果你不想退货,你可以在你的控制器中使用:

Product.where( :name.in => [name1, name2] )

希望我对你有所帮助

相关内容

  • 没有找到相关文章