2015-06-18 56 views
0

我試圖爲每個用戶實現一個私人資料頁面。這是一個學習應用程序,所以人們可以在他們的個人資料頁面上訪問他們付費的課程。因此,其他用戶無法輸入網址來訪問個人資料頁... HTTP響應應該是404用戶的私人資料|導軌4 |設計

到目前爲止想法是

def show 
    @user = User.find(current_user) 
End 

使每個用戶只能訪問自己創建一個profiles_controller自己的頁面。

有沒有最好的方法呢?

回答

2

想想一個理想的解決方案。其中問題甚至不存在。鑑於這個問題

「用戶應不會看到其他用戶的個人資料」

我們可以建立在一個原則

「只有一個對任何用戶的個人資料「

而且我們應該反映t在我們的路線帽子映射:

resource :profile # < not `resources`! 

...和配置文件將可在/profile。無論你的路線沒有ids,無需更改,因此無需檢查。而且它是有道理的,爲什麼要檢查任何東西,如果我們仍然使用相同的資源?

# ProfilesController 
def show 
    @user = current_user 
end 
+0

那實際上是我所擁有的 – AdrienNhm

+0

@AdrienNhm的哪個資源?那麼你很好去。 –

+0

@ D-side假設用戶的個人資料ID是3,然後他在瀏覽器'/ profiles/4'中鍵入,你會如何阻止他看到其他人的個人資料? –

0

您可以before_actionshow方法在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 

通過這種方式,用戶將被重定向到自己的配置文件路徑,每當他想嘗試訪問其他人的個人資料。

相關問題