使用主动管理员cancan进行范围界定

时间:2012-05-30 07:31:38

标签: ruby-on-rails cancan activeadmin

我如何使用活动管理员和范围内的范围界定可以可以。 我有管理员用户和那些与机构有(有)关系 和机构有很多个人资料 现在当管理员用户登录时,我希望显示具有相同机构的所有配置文件。

找不到以下链接有用。

http://activeadmin.info/docs/2-resource-customization.html#scoping_the_queries

1 个答案:

答案 0 :(得分:4)

如果你只是这样做,你会遇到问题吗?

# ability.db

def initialize(user)
  case
    # ...
    when user.super_admin?
      can :manage, :all
    when user.admin?
      can :manage, Profile, :institution_id => user.institution.id
    # 
    # ...
end

这将允许:Profile.accessible_by(current_user),此处与current_user.profiles

相同
class AdminUser
  has_one :institution
  has_many :profiles, :through => :institution
end

ActiveAdmin.register Profile do
  scope_to :current_user #here comes the variable which set in initializer
end

如果你想让superadmin访问所有帖子,你可以使用:association_method选项

ActiveAdmin.register Profile do
  scope_to :current_user, :association_method => :admin_profiles
end 

# in class User
def admin_profiles
  if super_admin?
    Profile.unscoped
  else
    profiles
  end
end

一个棘手的解决方案可以概括这一点并使用委托者类作为代理来取消所有超模型的模型。我可以根据要求拼出来。