如何在凤凰框架中的另一个管道定义中重用路由器管道定义?

Che*_*149 2 elixir phoenix-framework

我需要在我的web/router.ex文件中定义两个管道,如下所示:

pipeline :api do
  plug :accepts, ["json"]
  plug :fetch_session
  plug MyApp.Plugs.ValidatePayload
end

pipeline :restricted_api do
  plug :accepts, ["json"]
  plug :fetch_session
  plug MyApp.Plugs.ValidatePayload
  plug MyApp.Plugs.EnsureAuthenticated
  plug MyApp.Plugs.EnsureAuthorized
end 
Run Code Online (Sandbox Code Playgroud)

您可以清楚地看到:api管道中的步骤在管道中重复:restricted_api.

有没有办法在:api管道中重用:restricted_api管道?

我正在考虑类似于继承的东西:

pipeline :api do
  plug :accepts, ["json"]
  plug :fetch_session
  plug MyApp.Plugs.ValidatePayload
end

pipeline :restricted_api do
  extend :api
  plug MyApp.Plugs.EnsureAuthenticated
  plug MyApp.Plugs.EnsureAuthorized
end
Run Code Online (Sandbox Code Playgroud)

mic*_*ala 11

pipeline宏创建一个功能插件.因此,它可以像其他任何插头一样用于其他管道plug :pipeline.在提供的示例中:

pipeline :api do
  plug :accepts, ["json"]
  plug :fetch_session
  plug MyApp.Plugs.ValidatePayload
end

pipeline :restricted_api do
  plug :api
  plug MyApp.Plugs.EnsureAuthenticated
  plug MyApp.Plugs.EnsureAuthorized
end
Run Code Online (Sandbox Code Playgroud)