活动管理员:无法将资源范围限定为current_admin_user

时间:2013-06-09 19:17:27

标签: ruby-on-rails ruby scope activeadmin

我的应用中只有管理界面,我使用AdminUser模型。管理员用户可以拥有不同的角色。

我想基于admin角色更改资源检索。我添加到我的ActiveAdmin寄存器块:

#app/admin/payments.rb
scope_to :current_admin_user

我希望我能写出类似的内容:

#app/models/admin_user.rb
def payments
  case self.role
  when role == 'manager'
    Payments.where('...')
  when role == '...'
  end
end

但这不起作用,并始终显示所有资源。

我知道如何才能完成这项工作?

2 个答案:

答案 0 :(得分:0)

最后,我使用了scoped_collection方法

ActiveAdmin.register Payment do

 ...

 controller do

  def scoped_collection
    #roles which need to be scoped  
    if current_admin_user.role == 'accountant' or current_admin_user.role == 'manager'
        resource_class.send(current_admin_user.role)
    end
 end
end

然后只需在模型中定义范围:

class Payment < ActiveRecord::Base

  scope 'accountant', where('...')
  scope 'manager', where('...')

 ...
 end

答案 1 :(得分:0)

我找到了更好的解决方案。

授权适配器做得很好,并且不需要范围。例如,使用CanCan:

class Ability
include CanCan::Ability

  def initialize(user)

    #read/manage actions
    if user.role == 'manager'
      can :manage, Payment, :accessible_by_manager => true

    elsif user.role == 'accountant'
      can :read, Payment, :accessible_by_accountant => true
    else
      #can read all
      can :read, Payment
    end    
  end

end