PaperTrail:当我们跟踪用户*和*管理员用户的更改时,如何区分谁?



我们模型的whodunnit值是一个字符串 - 例如"22"Userid22的字符串。

问题是我们同时使用UserAdminUser模型来跟踪whodunnit。因此,无法判断更改是由用户还是由管理员用户进行的:

def user_for_paper_trail
current_user || current_admin_user
end

我对 PaperTrail 有点陌生,但通过他们的文档工作,无法提出任何解决方案。这可能是一个奇怪的请求,但我希望有一个像任意字段这样的东西,我们可以添加一个值作为 whodunnittype,如果这有意义的话。或者一种仅根据控制器跟踪某些更改的方法(在这种情况下有效,因为我只会跟踪通过 AdminPanel 所做的更改)。

感谢您的任何建议或指导。

PaperTrail 存储id的原因如下:

  • Whodunnit 是使用 PaperTrail 提供的默认before_action分配的,并且正在对your user_for_paper_trail方法返回的值调用.id

  • 应用根据user_for_paper_trail方法的结果手动调用.id

由于UserAdminUserid不是普遍唯一的,因此应存储不同的值。

whodunnit值可以是你决定的任何字符串。 如果您有可用于区分UsersAdminUsers的唯一标识符,则应存储该值。

我认为这些选项之一可能会解决您的问题:

  1. 如果email在两个用户模型之间是唯一的,请存储电子邮件而不是 ID。

  2. 如果email不是唯一的,您可以存储一个字符串,该字符串同时显示用户模型类型和 id(例如'User: 1'和/或'AdminUser: 1'),然后当你去获取whodunnit值时,你可以解析用户模型和ID的字符串,然后根据需要使用该信息。

  3. 通读 PaperTrail 如何详细说明如何找出谁负责更改并提出类似的自定义解决方案(或另一种选择)。

最新更新