2

我處於困境中,有很多與我的應用上的current_user關聯的對象。並且不知道在我的控制器中是否繼續使用ID來查找這些對象或直接放置current_user +對象。Rails current_user最佳實踐

例:

class HousesController < ApplicationController 

def show 
     @house = House.find(params[:id]) **or?** @house = current_user.house 
    end 

def edit 
     @house = House.find(params[:id]) **or?** @house = current_user.house 
    end 
end 

而這會和。感謝的提前

+0

我會堅持使用'params [:id]'。如果以後你決定添加一個額外的功能,例如,管理員可以編輯任何房屋,使用'current_user.house'就可以防止這種情況發生。 – pjumble 2012-03-22 12:26:00

+0

所以,靈活性最好是保持ID,是的,這是真的,但你注意到,如果你直接分配它感覺你會獲得性能? – dcalixto 2012-03-22 12:31:08

+0

在這樣一個簡單的例子中,你無處可去*你需要擔心表演的地方。 – DGM 2012-03-22 15:58:57

回答

4

如果使用House.find(params[:id])你有一個潛在的安全漏洞,爲給定用戶可以簡單地更改URL的數量和訪問的房子不同的用戶。所以,如果你走這條路線,你必須添加一些東西來保護不受歡迎的訪問。

OTOH,current_user.house讓他們在自己的房子,但需要替代代碼的管理功能。

對於簡單的應用程序,您可以手動執行此操作,但對於較大的應用程序,您可能需要考慮授權框架,如cancandeclarative_authorization,您可以在其中更輕鬆地定義權限。

我用decl_auth自己,和我所有的控制器或者使用它的加載與filter_resource_access資源的方法(加載相應的資源或罰球和錯誤,如果不允許的)或用House.with_permissions_to(:index)手這隻會如果給我一個家,我有權加載它。

與往常一樣,Railscasts最好說:cancandeclarative authorization

+0

呃感謝:)我會尋找這些認證之一! – dcalixto 2012-03-22 16:02:56