Elixir 角色插入路由器phoenix内部

Elixir 角色插入路由器phoenix内部,elixir,phoenix-framework,phoenix,Elixir,Phoenix Framework,Phoenix,目前,我有一个角色插件,如下所示: plug Roles, :role 它接收特定角色作为第二个参数,并从正在使用的当前令牌中获取当前用户。我是这样使用控制器模块内部的插头的: plug Roles, :manage_users when action in [:index, :show, :delete] 问题是,我想将所有这些逻辑移到router.ex,以明确控制器的配置 从文档中,默认的管道/1和管道/1只接收一个作为标识符的原子,因此无法将参数传递给我的插头 使用这个插头的正确方法是

目前,我有一个角色插件,如下所示:

plug Roles, :role
它接收特定角色作为第二个参数,并从正在使用的当前令牌中获取当前用户。我是这样使用控制器模块内部的插头的:

plug Roles, :manage_users when action in [:index, :show, :delete]
问题是,我想将所有这些逻辑移到
router.ex
,以明确控制器的配置

从文档中,默认的
管道/1
管道/1
只接收一个作为标识符的原子,因此无法将参数传递给我的插头


使用这个插头的正确方法是什么,这样我就可以在
router.ex
内部使用它?

我最后使用了一些宏魔术:

defmodule PlugUtils do

  defmacro __using__(_) do
    quote do
      import unquote(__MODULE__)
    end
  end

  defmacro param_pipe(pipe_name, plug_name, plug_params) do
    quote do
      pipeline unquote(pipe_name) do
        plug unquote(plug_name), unquote(plug_params)
      end

      pipe_through unquote(pipe_name)
    end
  end
end
开关依次可通过以下方式在路由器模块中使用:

use PlugUtils
param_pipe :backups_upload, RolePlug, :upload_backup
这种方法唯一的缺点是我不能指出控制器的原子,因为这个插件是在路由器插件之前执行的,但是通过创建单独的作用域,同样的事情也可以实现