UserController
'da bir fiş kullanırsınız. 0.4.x
şartlı s fişi için bir yeteneği vardır, ama sen bir şey gibi ile istediğinizi elde edebiliriz:
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
değişiklikler daha kolay koşullu fişleri sağlayacak 0.5
yakında geliyor, yani:
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
Bu bir Denetleyicilerinizi genel/kısıtlı erişim için ayrı tutmak için iyi bir fikir, bu yüzden kısıtlı işlevsellik için başvuru yaptığınız gibi bir Admin.UserController
eklerim. Bu sizin gibi herhangi bir şey olabilir
defmodule MyApp.Router do
use MyApp.Web, :router
pipeline :admin do
plug :accepts, ["html"]
plug Authentication # this represents some plug that provides authentication
end
scope "/", MyApp do
pipe_through :browser
resources "/things", ThingController
end
scope "/admin", MyApp do
pipe_through :admin
resources "/admin/things", Admin.ThingsController
end
end
yönetici kapsamı sadece bir örnektir, ama boru hattı fikri tutarlı kalır:
Güzel! İyi çalışıyor. Ben Phoenix.Controller api doc örneğinde okuduğumda verilen fişi ile ilgisi vardı, ama son kullanıcılar tarafından uygulanmasının amaçlandığından emin değildim ya da çekirdek için ise geliştiricileri. Bu arada, bağlantı kaynağı etki alanını bağlayıcıdan çıkarmak için bir yol var mı? Sso giriş başarısı durumunda çağıran url'ye (farklı argümanlarla) yönlendirmek istiyorum ... – adanselm