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)}
我有一个简单的 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)}