0

我创建了一个users有很多areas(通过subscriptions)的应用程序。有些users人有这个:admin角色,这些用户也有很多administrative_areas(通过administrations。我正在努力寻找最好的方法来确保给定区域 A 的管理员进入用户索引页面,他们只能看到区域 A 中的其他用户,但不是这个区域之外的。我的模型设置如下:

class User < ActiveRecord::Base
  has_many :subscriptions
  has_many :areas, through: :subscriptions

  has_many :administrations
  has_many :administrative_areas, through: :administrations, :source => :area, :class_name => "Area"
end

class Area < ActiveRecord::Base      
  has_many :subscriptions
  has_many :users, :through => :subscriptions

  has_many :administrations
  has_many :admins, :through => :administrations, :class_name => "User", :source => :user
end

我可以成功设置用户/管理员,但我正在努力获取正确的 ActiveRecord 查询以仅返回管理员的相关用户。

关于解决这个问题的任何想法,或更好的方法的建议?

谢谢!

4

1 回答 1

0

假设@admin_user某些具有管理员角色的用户。

  @admin_areas = User.joins(:subscriptions).where('subscriptions.area_id' => @admin_user.administrative_areas.map(&:id))

您可以对角色使用cancan gemmanage并为不同的角色提供控制。

编辑:您可以尝试以下内容

在用户.rb

scope :users_to_manage, lambda{ joins(:subscriptions).where('subscriptions.area_id' => current_user.administrative_areas.map(&:id)) #if you have access current_user in model

在能力.rb

can :manage, Area.users_to_manage
于 2013-02-24T19:47:28.123 回答