Rolify Gem 严格 Mode/Scoped 角色

Rolify Gem Strict Mode/Scoped Roles

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

即(根据 documentation 的严格模式)

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

本质上,我希望具有工程师角色的用户能够对作业class具有某些权限,但不一定对特定作业具有权限。

因此,我为作业 class 和作业实例 class 赋予用户 1 工程师 的角色。而 user2 仅获得职位 class 的 工程师 角色。就像文档一样。

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.

但是当我尝试进行 class 级别的 rolify 调用时

(即 Class 级别 documentation

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

它returns 用户 1 和用户 2。当我只期望 user1 时,因为它专门绑定到该实例。严格模式不是那样工作还是我做错了什么?

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

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

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