Свернуть и получить список пользователей с определенным доступом к ресурсу

У меня две модели Organization а также Users который я использую 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 ответа

Решение

Попробуй это.

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

Это должно добавить только те, которые используют модель ролей (пропуская те в классе). Вы также можете попробовать что-то более явное с условиями увидеть эту проблему / PR:

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

Добавление этого ответа, чтобы это могло помочь другим.

class Organization < ActiveRecord::Base
  resourcify

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

Это делается для того, чтобы отфильтровать пользователей с помощью внутренней таблицы присоединяющихся ролей, в которой есть записи ролей, связанные с конкретным объектом Organization.

Другие вопросы по тегам