Строгий режим Rolify Gem/роли с ограниченной областью действия

У меня есть простое приложение Rails 4 только с двумя пустыми моделями: User и Job. И я использую гем Rolify в строгом режиме, чтобы дать пользователям роли.

т. е. (строгий режим согласно документации)

class User < ActiveRecord::Base
    rolify strict: true
end

По сути, я хочу, чтобы пользователи с ролью engineer могли иметь определенные разрешения для класса Job, но не обязательно разрешения для конкретного задания.

Поэтому я назначаю пользователю user1 роль инженера для класса Job и экземпляра класса Job. А user2 получает только роль инженера для класса Job. Так же, как документация.

job = Job.create() # Job class instance

user1.add_role(:engineer, Job) # Job class
user1.add_role(:engineer, job) # Job class instance

user2.add_role(:engineer, Job) # Job class

Что отлично работает, и я могу сказать что-то вроде;

user1.has_role? :engineer, Job #=> true
user1.has_role? :engineer, job #=> true

user2.has_role? :engineer, Job #=> true
user2.has_role? :engineer, job #=> false This is the result I expect.

Но когда я пытаюсь сделать вызов на уровне класса

(т.е. уровень класса согласно документации)

User.with_role(:engineer, job)
# => [ list of User instances that have a scoped role of "engineer" to a job instance ]

Он возвращает оба user1 и user2. Когда я ожидал только user1, потому что он был специально привязан к этому экземпляру. Строгий режим так не работает или я что-то не так делаю?


person ionylion    schedule 14.09.2015    source источник
comment
То же самое. Мне кажется законной ошибкой.   -  person Ardee Aram    schedule 14.10.2015


Ответы (1)


Я думаю, что это ошибка, поэтому я зарегистрировал проблему здесь: https://github.com/RolifyCommunity/rolify/issues/362

Чтобы продолжить свою жизнь, вы можете выполнить has_role? двойную проверку для каждого из возвращенных пользователей.

User.with_role(:engineer, job).select{|user| user.has_role?(:engineer, job)}

person Ardee Aram    schedule 14.10.2015
comment
Спасибо за ответ, это будет работать на данный момент. Я буду следить за страницей проблемы github. И я думаю, что это может быть принятым ответом, пока предполагаемая ошибка не будет устранена. Спасибо еще раз. - person ionylion; 22.10.2015