【问题标题】:Hide Products from list based on authorization using cancan in rails_admin在 rails_admin 中使用 cancan 根据授权从列表中隐藏产品
【发布时间】:2014-04-28 20:36:13
【问题描述】:

我有一个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 不支持它。谁能帮我解决这个问题?

【问题讨论】:

    标签: ruby ruby-on-rails-3 mongoid cancan rails-admin


    【解决方案1】:

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

    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
    

    【讨论】:

    • 太棒了,我得到了我想要的那个。
    【解决方案2】:

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

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

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

    如果您不想退回这些产品,您可以在您的控制器中使用:

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

    希望对你有所帮助

    【讨论】:

      猜你喜欢
      • 2019-10-12
      • 2012-02-14
      • 1970-01-01
      • 2018-07-18
      • 2017-11-04
      • 1970-01-01
      • 2018-03-01
      • 2011-06-24
      • 2021-10-18
      相关资源
      最近更新 更多