滚动并获取具有对资源的特定访问权限的用户列表

时间:2015-12-14 12:50:39

标签: ruby-on-rails ruby-on-rails-4 cancan cancancan rolify

我有两个模型OrganizationUsers,我使用Rolify进行连接。

用户拥有角色,而组织是资源。

这很好但是我的问题是尝试获取特定资源的用户列表。我想获得一个列表,列出在该资源上有任何作用的所有用户(我不关心类级角色,如通用管理员等)。

我尝试过做类似下面的事情,但它很糟糕,它仍然会返回一个班级管理员列表(那些管理员但实际上并没有在任何特定资源上)。

class Organization < ActiveRecord::Base
  resourcify

  def users
    # this is terrible and still doesn't work right.
    User.with_role(:admin, self) + User.with_role(:press, self)
  end
end

class User < ActiveRecord::Base
  rolify

  def organizations
    Organization.with_roles(Role.role_names, self).uniq
  end
end

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

试试这个。

has_many :users, through: :roles, class_name: 'User', source: :users

这应该只添加使用角色模型的那些(跳过类中的那些)。你也可以尝试更明确的条件,看看这个问题/ PR:

https://github.com/RolifyCommunity/rolify/pull/181

答案 1 :(得分:1)

添加此答案,以便对其他人有所帮助。

class Organization < ActiveRecord::Base
  resourcify

  def users
    User.joins(:roles).where(
      roles: { resource_type: 'Organization', resource_id: self.id }
    )
  end
end

这是通过内部联接角色表过滤掉用户,该表具有与特定组织对象相关的角色条目。