插头选择何时

时间:2018-03-14 13:47:20

标签: elixir phoenix-framework

如何在Phoenix控制器中连接具有属性和表达式when的插件?

现在它看起来像这样: plug(MyappWeb.Plugs.Auth when action in [:show])

我必须补充: mykey: "my_value" 我尝试了不同的语法变体,但都没有工作

plug(MyappWeb.Plugs.Auth, %{mykey: "my_value"} when action in [:show]) plug(MyappWeb.Plugs.Auth when action in [:show], %{mykey: "my_value"})

1 个答案:

答案 0 :(得分:1)

问题是圆括号。

在我的项目中,我做了同样的事情来检查当前登录用户是否有特殊角色。所以我需要定义这样的静态选项。

我有一个插件methoddef has_role_from_list(conn, options) do),它接收conn对象和选项中的关键字列表。

在我的controller中,我调用了插件方法,并将接受的角色作为关键字列表提供:
plug :has_role_from_list, [roles: ["match-editor", "team-editor"]]

如果我必须限制插件调用某些操作,我可以自由定义它,如下所示: plug :has_role_from_list, [roles: ["match-editor", "team-editor"]] when action in [:create, :update]

关键是,控制器中plug macro调用的圆括号应仅包含宏的参数。在我的示例中,它看起来像这样:plug(:has_role_from_list, [roles: ["match-editor", "team-editor"]]) when action in [:create, :update]