2014-07-17 110 views
0

我有很多方法是獲取有關當前用戶信息,如:商店信息 - 軌道

current_user.is_admin? 
    current_user.is_student? 
    current_user.is_teacher? 

這些方法需要評估,如果CURRENT_USER(的has_many:帳戶)有一個具有相應角色(學生,管理員等)的帳戶。

我可以在數據庫中創建一些東西來鞏固這一點,但似乎沒有必要。

在登錄時是否存在定義真或假的導軌方式,然後能夠在不查詢的情況下引用?換句話說,def is_admin?將在user_session create中被定義爲具有真/假值的常量。而且,如果他們是管理員,我再也不用再查詢用戶帳戶來阻止他們。

+0

「cache」and「ca清「是你需要搜索的詞。選項的負載。 –

回答

1

你可以只使用會話存儲

def role 
    session[:role] ||= 'student' 
end 

def is_admin? 
    role == 'admin'  
end 

但它是如此的渺小,其保存在數據庫中是不會傷害和機會是你反正檢索從數據庫中大多數的用戶請求。

+0

我發現會議有點脆弱......並且不安全。但是,你的回答讓我看到了文檔。我不知道,鐵軌只是這個答案。您可以使用active_record_store進行會話並將會話數據存儲在數據庫中。 Rails也給了我們「rake db:sessions:create」來爲這些會話創建表。熱狗! – hellion

+0

Cookies的數據已簽名,因此沒有人可以篡改它。他們可以閱讀,但這似乎並不是一個問題。 – makhan

0

Rails對此有一個答案。

步驟1

進入session_store.rb初始化和更改默認:

Rails.application.config.session_store :cookie_store, key: xxxx 

Rails.application.config.session_store :active_record_store, key: xxx 

然後,添加表使用會話數據存儲在數據庫:

rake db:sessions:create 
+0

這已在rails 4中更改。如果您設置了「secret_key_base」,則Cookie現在會被簽名並加密。 Cooke_store顯然也更快。所以,在rails 4中,默認的cookie_store似乎是要走的路。 – hellion