2011-10-18 33 views
0

我正在研究改進Rails應用程序中控制器操作的性能。在看完一些性能指標計數器之後,我現在知道問題在於我們在整個模型代碼中執行了多次授權檢查。他們看起來是這樣的:提高Rails模型中授權檢查的性能

Class Company < ActiveRecord::Base 
def member?(user) 
    #look up a table to check for membership if @is_member does not exist else return @is_member 
end 

def employee?(user) 
    #look up a table to check for membership 
end  

def manager?(user) 
    #look up a table to check for membership 
end 
end 

class SomeModel < ActiveRecord::Base 
def some_method 
    do_something if current_company.employee?(current_user) 
end 
end 

因爲有一幫我們做一些類似some_method檢查的地方,請求通常最終會進入數據庫的次數不少。這似乎是一種浪費的做事方式。有什麼方法來加快這種授權檢查? (假設緩存是這裏的路要走)

回答

0

由於授權很少改變,看來你有會員資格的有限列表,以考慮,你可以:

  • 用戶數據庫添加列每個角色
  • 上的角色模型創建一個回調來計算會員用戶

這樣,你只計算一次的會員,當角色被保存。其他一切都是簡單/快速的列查找。

+0

這種方法(如果我理解它的權利)將不會在我的情況下工作,因爲雖然成員資格的名單是有限的,它是動態的,即。用戶可以是潛在的大量公司的成員。當前的實現仍然是非常快速的單表查找(從將用戶映射到公司並具有指示成員級別的角色掩碼的關聯表)。我正在尋找有效避免碰到數據庫的方法,因爲每次請求會多次調用該成員資格檢查,並且成員身份不會隨時間而改變。 –