Rolify Gem严格模式/范围角色



我有一个简单的Rails 4应用程序,只有两个空模型,User和Job。我使用Rolify gem,在严格模式下,给用户角色。

。e(根据文档严格模式)

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

本质上,我希望角色engineer的用户能够对Job类具有某些权限,但不一定具有特定Job的权限。

因此,我为Job类和Job类的实例赋予user1 工程师的角色。而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.

但是当我尝试进行类级别的聚合调用时

(我。e类级别(按文档)

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

返回 user1和user2。当我只期望user1时,因为它特别绑定到那个实例。是严格模式不起作用,还是我做错了什么?

我认为这是一个bug,所以我在这里提交了一个问题:https://github.com/RolifyCommunity/rolify/issues/362

为了继续你的生活,你可以对每个返回的用户做一个has_role?双重检查。

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

最新更新