У меня есть простое приложение 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, потому что он был специально привязан к этому экземпляру. Строгий режим так не работает или я что-то не так делаю?