我尝试使用whatwasit为所有凤凰模型引入审核日志记录。代码库使用ex_admin作为管理员部分。
根据whatwasit文档,我们需要在模型中的changeset
方法中添加一个额外的参数,并使用此可选的第3个参数调用prepare_version
。有了这个,我可以在保存模型时使用versions
表生成一个版本(使用iex进行测试)。
但是,似乎并不是一个例子,其中resource_controller(来自ex_admin)允许钩子捕获当前登录的用户,然后在定义的结构中使用它作为第3个参数传入到changeset
方法。
我试过的是在控制器块中引入一个before_filter来捕获当前用户:
controller do
before_filter :capture_audit_settings, only: [:create]
def capture_audit_settings(conn, params) do
user = Coherence.current_user(conn)
audit_settings = [whodoneit: user, whodoneit_name: user.name]
Module.put_attribute(__MODULE__, :audit_settings, audit_settings)
conn
end
end
changesets create: &__MODULE__.create_changeset/2
def create_changeset(model, params) do
tmp = Module.get_attribute(__MODULE__, :audit_settings)
# TODO: Need to invoke the changeset/3 method that is defined in the model with tmp as the 3rd parameter
end
有人可以帮忙吗?