ada*_*elm 9 elixir phoenix-framework
我有一个小凤凰应用程序,允许用户登录并查阅他们的个人资料.我使用了以下简单路线:
resources "/users", MyApp.UserController
Run Code Online (Sandbox Code Playgroud)
但这允许每个用户通过:index
操作查看用户列表,以及删除或更新任何用户.
限制访问管理员的最简单方法是什么?我应该在每个动作前加一张支票吗?或者我应该创建一个"/admin"
可以处理这些操作的资源?推荐的方式是什么?
Chr*_*ord 13
你可以使用插件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
Run Code Online (Sandbox Code Playgroud)
即将推出的更改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
Run Code Online (Sandbox Code Playgroud)
保持控制器的公共/限制访问是分开的,所以我会添加一个Admin.UserController
类似于你参考的限制功能.
归档时间: |
|
查看次数: |
3853 次 |
最近记录: |