我試圖爲每個用戶實現一個私人資料頁面。這是一個學習應用程序,所以人們可以在他們的個人資料頁面上訪問他們付費的課程。因此,其他用戶無法輸入網址來訪問個人資料頁... HTTP響應應該是404用戶的私人資料|導軌4 |設計
到目前爲止想法是
def show
@user = User.find(current_user)
End
使每個用戶只能訪問自己創建一個profiles_controller自己的頁面。
有沒有最好的方法呢?
我試圖爲每個用戶實現一個私人資料頁面。這是一個學習應用程序,所以人們可以在他們的個人資料頁面上訪問他們付費的課程。因此,其他用戶無法輸入網址來訪問個人資料頁... HTTP響應應該是404用戶的私人資料|導軌4 |設計
到目前爲止想法是
def show
@user = User.find(current_user)
End
使每個用戶只能訪問自己創建一個profiles_controller自己的頁面。
有沒有最好的方法呢?
想想一個理想的解決方案。其中問題甚至不存在。鑑於這個問題
「用戶應不會看到其他用戶的個人資料」
我們可以建立在一個原則
「只有一個對任何用戶的個人資料「
而且我們應該反映t在我們的路線帽子映射:
resource :profile # < not `resources`!
...和配置文件將可在/profile
。無論你的路線沒有ids,無需更改,因此無需檢查。而且它是有道理的,爲什麼要檢查任何東西,如果我們仍然使用相同的資源?
# ProfilesController
def show
@user = current_user
end
您可以before_action
爲show
方法在ProfilesController
。基本上,您需要檢查用戶可以查看的配置文件 - 僅屬於該用戶。
我假設URL是/users/:user_id/profiles/:id
before_filter :check_profile, only: :show
def check_profile
user = User.find_by_id params[:user_id]
unless params[:id] == user.profile.id
redirect_to users_profiles_path(user, user.profile)
end
end
通過這種方式,用戶將被重定向到自己的配置文件路徑,每當他想嘗試訪問其他人的個人資料。
那實際上是我所擁有的 – AdrienNhm
@AdrienNhm的哪個資源?那麼你很好去。 –
@ D-side假設用戶的個人資料ID是3,然後他在瀏覽器'/ profiles/4'中鍵入,你會如何阻止他看到其他人的個人資料? –