如何根据用户在活动管理员中的角色显示范围?

How to display scopes based on the role of the user in active admin?

我遇到一个错误:

 undefined local variable or method `current_admin_user' for #<ActiveAdmin::ResourceDSL

如何在此处访问 current_admin_user 对象?

  ActiveAdmin.register Job do
    def quick_filters
       if current_admin_user.super_admin?
         [:all, :draft, :scheduling, :rejected]
       else
         [:all, :scheduling, :rejected]
       end
    end

     quick_filters.each do |a|
       scope a
     end
  end

这是有效的:

controller do
   def scoped_collection
      @jobs = if current_admin_user.super_admin?
            super.includes :trip, :car, :concierge, :creator, :job_template
          else
            super.where(concierge_id: current_admin_user.id).includes :trip, :car, :concierge, :creator, :job_template
          end
   end
end

我认为这应该可行:

ActiveAdmin.register Job do

  scope :all
  scope :draft, :if => proc { current_admin_user.super_admin? }
  scope :scheduling
  scope :rejected

end

用于设置范围的 DSL 在服务器启动时进行评估,无法访问基于请求周期的数据(如登录用户)。为了解决这个问题,ActiveAdmin 提出了用 proc 包装代码的概念,以便将封闭的代码评估推迟到 request-cycle-time.

祝你好运!