Свернуть и получить список пользователей с определенным доступом к ресурсу
У меня две модели 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:
Добавление этого ответа, чтобы это могло помочь другим.
class Organization < ActiveRecord::Base
resourcify
def users
User.joins(:roles).where(
roles: { resource_type: 'Organization', resource_id: self.id }
)
end
end
Это делается для того, чтобы отфильтровать пользователей с помощью внутренней таблицы присоединяющихся ролей, в которой есть записи ролей, связанные с конкретным объектом Organization.