如何在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"})
答案 0 :(得分:1)
问题是圆括号。
在我的项目中,我做了同样的事情来检查当前登录用户是否有特殊角色。所以我需要定义这样的静态选项。
我有一个插件method(def 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]