0

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

我想根据管理员角色更改资源检索。我添加到我的 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

但这不起作用,并且总是显示所有资源。

知道我怎样才能得到这项工作吗?

4

2 回答 2

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
于 2013-06-09T21:03:16.767 回答
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
于 2013-06-09T20:10:16.280 回答