如何使用guardian和phoenix限制对特定操作的权限

时间:2016-01-25 18:32:09

标签: elixir phoenix-framework

我已设置监护人来对令牌中的特定权限进行编码,但是,我想在UserController中对此进行限制,以便在特定操作([:index, :show, :edit, :update, :delete])上要求它。我在控制器顶部使用以下行来要求整个控制器的admin: [:cms]权限:

plug Guardian.Plug.EnsurePermissions, handler: Ay.Guardian.ErrorHandler, admin: [:cms]

这样可以正常工作,但我想为此添加一个类似于警戒的子句(例如when action in [:index, :show, :edit, :update, :delete]),但我似乎无法按照我想要的方式工作。

我意识到我可以轻松检查每个动作中的声明,但由于控制器数量众多,我希望采用更通用的方法。

1 个答案:

答案 0 :(得分:2)

Try calling the plug like this:

plug Guardian.Plug.EnsurePermissions, [handler: Ay.Guardian.ErrorHandler, admin: [:cms]] when action in [:index, :show, :edit, :update, :delete]

(the [] are important!)

To make it a bit more readable try alias the plug like:

alias Guardian.Plug.EnsurePermissions

plug EnsurePermissions, [handler: Ay.Guardian.ErrorHandler, admin: [:cms]] when action in [:index, :show]