【问题标题】:Rolify Gem Strict Mode/Scoped RolesRolify Gem 严格模式/作用域角色
【发布时间】:2015-12-10 17:25:22
【问题描述】:

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

即(根据documentation 的严格模式)

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

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

所以我为 user1 赋予了 Job 类和 Job 类实例的 engineer 角色。而 user2 仅获得 Job 类的 engineer 角色。就像文档一样。

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.

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

(即documentation 的类级别)

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

它返回 user1 和 user2。当我只期望 user1 因为它专门与该实例相关联时。严格模式不是这样工作还是我做错了什么?

【问题讨论】:

  • 这里也一样。对我来说似乎是一个合法的错误。

标签: ruby-on-rails ruby rolify


【解决方案1】:

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

要继续您的生活,您可以对每个返回的用户进行has_role? 仔细检查。

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

【讨论】:

  • 感谢您的回答,现在可以使用。我会密切关注 github 问题页面。而且我想在解决所谓的错误之前,这可能是公认的答案。再次感谢。
猜你喜欢
  • 2012-10-29
  • 1970-01-01
  • 2016-12-13
  • 1970-01-01
  • 2019-06-17
  • 1970-01-01
  • 2015-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多