3

我使用RailsApps rails-composer创建了一个 rails-devise-pundit 入门应用程序。我对 ruby​​ on rails 还是有点陌生​​,对设计、专家和 rails 4 也比较陌生。

我正在查看代码以了解它是如何工作的。控制器和策略类中有很多地方 user.admin? 叫做。但是找不到管理员?方法。我希望它在 User 模型中,但它不存在。这是用户类:

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable, :confirmable,
         :recoverable, :rememberable, :trackable, :validatable
  enum role: [:user, :vip, :admin]
  after_initialize :set_default_role, :if => :new_record?

  def set_default_role
    self.role ||= :user
  end
end

在部分 users_controller.rb 中使用:

def show
  @user = User.find(params[:id])
  unless current_user.admin?
    unless @user == current_user
      redirect_to root_path, :alert => "Access denied."
    end
  end
end

权威人士或设计者是否以某种方式创建了这种方法?我已经看到它在权威文档中使用,但它只是将其用作示例。它并没有说需要创建方法或处理它。是否以某种方式使用具有 :admin 作为可能值的角色枚举?如果有人能解释这是如何工作的,我将不胜感激。

我计划很快添加使用 rolify gem 来处理角色,而不是用户类中的角色枚举。也许出于某种原因,我想要制作完全不同的角色名称。我想确保我了解如何保持一切正常。谢谢。

4

2 回答 2

9

角色在app/models/User.rb文件(User模型)中定义。

class User < ActiveRecord::Base
  .
  .
  .
  enum role: [:user, :vip, :admin]
  after_initialize :set_default_role, :if => :new_record?

  def set_default_role
    self.role ||= :user
  end

end

应用程序使用 ActiveRecordenum方法来管理角色。ActiveRecord 提供了方便的方法来查询角色属性:

user.admin! # sets the role to "admin"
user.admin? # => true
user.role  # => "admin"

有关详细信息,请参阅ActiveRecord::Enum的文档。ActiveRecordenum方法是 Rails 4.1 中的新方法。

我已经更新了rails-devise-pundit应用程序的 README 以包含此信息。我的Rails Pundit 教程也介绍了它。

于 2014-03-06T19:50:25.830 回答
0

它是 User 模型的一个属性。与first_nameor相同last_name,有一个称为admin布尔值的字段。

于 2014-03-06T02:26:02.797 回答