ruby-on-rails - 使用角色掩码查找具有特定角色的所有用户

标签 ruby-on-rails ruby ruby-on-rails-3 bitmap declarative-authorization

我一直在当前项目中使用位掩码来跟踪用户角色,但现在我需要能够为特定角色的所有用户进行查找。

我的角色设置如下:

  ROLES = %w[admin editor moderator contributor]

  def roles
    ROLES.reject do |r|
      ((roles_mask || 0) & 2**ROLES.index(r)).zero?
    end
  end

  def roles=(roles)
    self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) }.sum
  end

  def role_symbols
    roles.map(&:to_sym)
  end

我可以找到具有完全相同位图的所有用户,但不确定如何提取一个特定角色,在本例中是所有具有“编辑器”角色的用户。

最佳答案

关于 http://railscasts.com/episodes/189-embedded-association , Ryan Bates 提供了一个搜索范围:

named_scope :with_role, lambda { |role| {:conditions => "roles_mask & #{2**ROLES.index(role.to_s)} > 0"} }

您会在那里找到示例。

关于ruby-on-rails - 使用角色掩码查找具有特定角色的所有用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4909663/

相关文章:

ruby-on-rails - 停止 Devise 的当前密码要求

ruby-on-rails - MongoId 和 bson_ext 问题 : no such file to load -- bson_ext

Ruby:如何迭代目录中的文件,根据上次编辑时间排序

ruby-on-rails - Rails has_and_belongs_to_many 迁移

ruby-on-rails - 如何自定义 Devise_invitable 生成的表单?

ruby-on-rails - rails 5 : How to pass collection_select values through strong_params in a fields_for?

ruby-on-rails - 在 Rails 中大写单词的最佳做法是什么?

ruby - 你如何确定一个类的嵌套类?

ruby - 如何使用 defined?(super) 和 define_method

ruby-on-rails-3 - 在 heroku 上生产之前部署到测试服务器