ruby-on-rails - user.admin 在哪里?在 rails-devise-pundit 入门应用程序中定义?

标签 ruby-on-rails devise pundit railsapps

我使用了 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/

相关文章:

ruby-on-rails - rails : How to use ActionMailer by itself?

ruby-on-rails - 如何记录用户使用 Devise 和 Ruby on Rails 注册的 IP 地址?

ruby-on-rails - rails 测试 : ensure authorization (Pundit) is enforced in all controllers and actions

ruby-on-rails - 如何使用默认的 app/policies/application_policy.rb?

ruby-on-rails-3.2 - 在 Pundit 策略中访问 session 参数

ruby-on-rails - 如何为查询定义命名空间

mysql - Rails Simple_Form 在数据库中将值保存为 NULL

java - 使用设计身份验证将帖子从 Java/Android 应用程序保存到 Rails 服务器

ruby-on-rails - CSRF token 与 session 中的 token 不匹配(Rails 4.1)

ruby-on-rails - Rails - Devise - 将配置文件信息添加到单独的表