システム用の管理ツールアプリを構築しています。すべてのユーザーが行ったすべてのアクションを記録したい。
これが私がしたことです
defmodule AdminToolWeb.UserController do
use AdminToolWeb, :controller
...
def delete(conn, %{"id" => id}) do
current_user = Guardian.Plug.current_resource(conn)
with %User{} <- user = Accounts.get_user(id) do
Accounts.delete_user(user)
conn
|> put_flash(:info, "#{user.id} deleted.")
|> Activities.log(current_user)
|> redirect(to: Routes.user_path(conn, :index))
end
end
...
end
|> Activity.log(current_user)
問題は、アプリにあるすべてのコントローラーのすべてのアクションをパイプ処理する必要があることです。
このようなものを実装する方法はありますか?
Controller -> (ActivityLogPlugOfSorts) -> View
カスタムプラグを使用して、このように呼び出しますか?
defmodule AdminToolWeb.UserController do
use AdminToolWeb, :controller
import AdminToolWeb.Plugs.Activities
plug :log
...
ただし、コントローラーとビューの間で呼び出す必要があります。
または、代わりに View モジュール内に関数を配置する必要がありますか?
もっと良い方法があることを願っています。