使用 Audited gem 在 Rails 5.2 应用程序中在哪里列出未审核的列?

Posted

技术标签:

【中文标题】使用 Audited gem 在 Rails 5.2 应用程序中在哪里列出未审核的列?【英文标题】:Where to list non audited columns in Rails 5.2 application with Audited gem? 【发布时间】:2020-08-19 02:33:41 【问题描述】:

我发现了 Audited gem,它可以轻松地为我的应用程序带来审计。但我仍然对审核用户身份验证相关活动(由 Devise 提供)存有疑问。

至少我想从属于用户模型的日志身份验证相关列中删除。我试过了:

User.non_audited_columns = [:encrypted_password, :reset_password_token, :confirmation_token, :unlock_token]

但我不知道该把这句话放在哪里? 在应用程序控制器中没有效果,并且在 Audited intializer 中时服务器无法启动,因为 Devise 缺少类。

这种类型的配置应该在哪里进行? 谢谢你的帮助!

编辑:要审核所有模型,我实际上在 ApplicationRecord 类定义中插入了“已审核”语句:

class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true
  include PgSearch::Model
  audited
---

现在,根据 Hazhir 和 Widjajayd 的建议,我尝试在 User 模型中覆盖它:

class User < ApplicationRecord
extend CsvHelper
  # Audit trail setup
  audited except: [:encrypted_password, :reset_password_token, :confirmation_token, :unlock_token]
---

因此,当仅在用户模型中需要“审核”时,包括异常列表,它会按预期工作。但是当在 ApplicationRecord 中声明并在 User 模型中覆盖时,异常会被忽略。

您能否推荐一种用于覆盖“已审核”(包括列异常)的有效语法?

或者您会建议对每个相关模型分别应用“已审核”吗?

非常感谢您的帮助!

【问题讨论】:

用户模型呢?你试过把这条线放在用户模型中吗?您也可以使用此格式排除某些列:audited except: [:encrypted_password, :reset_password_token, :confirmation_token, :unlock_token] 嘿@user1185081 你有没有找到解决这个问题的方法,或者是在每个类中添加审核的情况? @bubbaspaarx - 我终于将它添加到每个模型中。 谢谢伙计。非常感谢,正在兜圈子。 【参考方案1】:

从this documentation你可以指定列如下

class User < ActiveRecord::Base
  # All fields
  # audited

  # Single field
  # audited only: :name

  # Multiple fields
  # audited only: [:name, :address]

  # All except certain fields
  # audited except: :password
end

对于您的情况,您可以按如下方式添加用户模型

class User < ActiveRecord::Base

  audited except: [:encrypted_password, :reset_password_token, :confirmation_token, :unlock_token]

end

【讨论】:

以上是关于使用 Audited gem 在 Rails 5.2 应用程序中在哪里列出未审核的列?的主要内容,如果未能解决你的问题,请参考以下文章

ActionController::InvalidAuthenticityToken Rails 5 / 设计 / 审核 / PaperTrail gem

使用 rails audited gem 根据已审核的更改过滤掉结果

审计与 Rails Audited gem 的深度关联

如何在 Rails 中调试 gem?

安装acts_as_audited 时遇到问题

如何向 Rails 4 中的所有 ActiveRecord 模型添加 `audited` 方法调用?