ruby-on-rails-3 - Rails 3.0 :cancan roles defined in user. 博客应用程序的 rb

标签 ruby-on-rails-3

有人可以解释一下这段代码吗,这与解释的博客应用程序相同 在 github 上,但我无法理解这部分的使用,特别是 namespace 角色掩码的使用。

此应用程序中有管理员、版主和作者三个角色。 基于 CRUD 功能,他们可以编辑评论或删除评论。

         class User < ActiveRecord::Base
                  acts_as_authentic
                  has_many :articles
                  has_many :comments

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

                  ROLES = %w[admin moderator author]

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

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

                  def role_symbols
                    roles.map(&:to_sym)
                  end
                end

最佳答案

role_mask 是一个位字段。每当将角色分配给User时,role_mask就会自动更新。角色掩码和各自角色的可能值:

111: author, moderator, admin
110: author, moderator
101: author, admin
100: author
011: moderator, admin
010: moderator
001: admin

位域用于快速搜索数据库中具有特定角色的用户。这是通过在 role_mask 上应用 & 运算符以及您要查找的角色的位字段来完成的。例如,要获取所有作者用户,with_role 范围会对 roles_mask & 100 为 true 的所有记录进行数据库查询。

关于ruby-on-rails-3 - Rails 3.0 :cancan roles defined in user. 博客应用程序的 rb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10278318/

相关文章:

ruby-on-rails - 如何检索刚刚使用嵌套方法创建的帐户 ID?

ruby-on-rails-3 - 在Nginx + Unicorn上加载时出现严重的网关错误(Rails 3应用)

ruby-on-rails - 如何在 activerecord 查询中使用多个 .join

ruby-on-rails-3 - 轨道 3 + PostgreSQL + RSpec : App works fine but RSpec example fails

ruby-on-rails-3 - postgresql 版本不会改变默认版本

javascript - 找出当前在 javascript 幻灯片中显示的照片

ruby-on-rails - 使用rvm在Snow Leopard for Rails 3上安装mysql2 gem

ruby-on-rails-3 - 如何在rails中以pdf格式呈现格式

mysql - ruby on rails file 从数据库下载二进制文件并提供链接

ruby-on-rails - 如何在有条件的情况下使用 After_save?