我使用了 RailsApps rails-composer创建一个 rails-devise-pundit 入门应用程序。我对 ruby on rails 还是有点陌生,对设计、专家和 rails 4 也比较陌生。
我正在查看代码以了解其工作原理。 Controller 和策略类中有很多地方 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
是否 pundit或以某种方式设计创建此方法?我已经看到它在权威文档中使用,但它只是将其用作示例。它并没有说需要创建方法或处理它。是否以某种方式使用具有 :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 中的新方法。
我已经更新了 rails-devise-pundit 的自述文件应用程序包括此信息。我的 Rails Pundit Tutorial 中也有介绍.
关于ruby-on-rails - user.admin 在哪里?在 rails-devise-pundit 入门应用程序中定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22213152/