我有一个小的Phoenix应用程序,允许用户登录并查询其个人资料。我使用以下简单路线:
resources "/users", MyApp.UserController
但这允许每个用户通过
:index
操作查看用户列表,以及删除或更新任何用户。将访问权限限制为仅管理员的最简单方法是什么?我应该在每项操作前添加一张支票吗?还是应该创建一个
"/admin"
资源来处理这些操作?推荐的方法是什么? 最佳答案
您可以在UserController
中使用插件。 0.4.x
没有条件地插入s的能力,但是您可以通过以下方式实现所需的功能:
defmodule MyApp.UserController do
use Phoenix.Controller
plug :authenticate, :admin
plug :action
def index(conn, _) do
render conn, "index"
end
def create(conn, params) do
# do the creating
end
...
defp authenticate(conn, :admin) do
do_auth(conn, action_name(conn))
end
defp do_auth(conn, action) when action in [:create, :update, :destroy] do
if AdminAuth.authenticated?(conn) do
conn
else
halt conn
end
end
defp do_auth(conn, _action), do: conn
end
0.5
即将推出的更改将使条件插件更容易使用,即:defmodule MyApp.UserController do
use Phoenix.Controller
plug :authenticate, :admin when action in [:create, :update, :destroy]
def index(conn, _) do
render conn, "index"
end
def create(conn, params) do
# do the creating
end
...
defp authenticate(conn, :admin) do
if AdminAuth.authenticated?(conn) do
conn
else
halt conn
end
end
end
最好将用于公共(public)/受限访问的 Controller 分开,所以我将像您对受限功能所做的引用一样添加一个
Admin.UserController
。关于elixir - 如何限制进入 Phoenix 的某些路线?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26055501/