【问题标题】:Roles plug inside of router phoenix角色插件在路由器凤凰内部
【发布时间】:2020-01-23 20:41:29
【问题描述】:

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

plug Roles, :role

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

plug Roles, :manage_users when action in [:index, :show, :delete]

问题在于我想将所有这些逻辑移至router.ex,以明确控制器的配置是什么。

根据文档,默认的 pipeline/1pipe_through/1 只接收一个作为标识符的原子,因此无法将参数传递给我的插件。

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

【问题讨论】:

    标签: elixir phoenix-framework phoenix


    【解决方案1】:

    我最终使用了一些宏魔法:

    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
    

    Witch 可以通过以下方式在路由器模块中使用:

    use PlugUtils
    param_pipe :backups_upload, RolePlug, :upload_backup
    

    这种方法唯一的缺点是我不能指向控制器的原子,因为这个插件是在路由器插件之前执行的,但是通过制作单独的作用域可以实现同样的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-03
      • 2016-01-22
      • 1970-01-01
      • 2016-05-08
      • 2017-07-22
      • 2017-02-05
      相关资源
      最近更新 更多