user.admin在哪里? 在rails-devise-pundit starter app中定义?

我使用RailsApps rails-composer创建了rails- devise-pundit starter应用程序。 我仍然对铁轨上的ruby有点新意,而且更新设计,专家和导轨4。

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

class User  :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来处理角色而不是用户类中的角色枚举。 也许我会因为某些原因想要制作完全不同的角色名称。 我想确保我理解如何保持一切正常。 谢谢。

角色在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 

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

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

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

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

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