2012-01-14 61 views
1

我有一個多租戶的Rails應用程序。它擁有賬戶,客戶和交易的資源。一個帳戶有許多客戶有很多交易。我想確保我永遠不會意外地執行Client.find,Transaction.find等(所有內容都必須通過the_account.clients.find或client.transactions.find等)。我想這樣做,所以我不會不小心通過忘記首先在帳戶中選擇從錯誤的帳戶向錯誤的用戶顯示錯誤的用戶。如何禁止從軌道中的嵌套資源選擇?

有沒有辦法禁用Client.find(Client.find_by_name,Client.find_by_etc),但仍然允許the_account.clients.find?

回答

0

我不知道完全禁用Client.find,但我可能會將方法放入每個客戶端和事務控制器的底部以處理查找。下面是客戶端的代碼是什麼樣子:

def collection 
    if current_user.admin? 
    Client.all 
    else 
    current_user.account.clients 
    end 
end 

然後,到處都在我的控制我通常使用Client.find,我會代替collection代替。給你所有正確的記錄,沒有過度暴露的風險。

+0

謝謝,不幸的是,我仍然必須確保調用集合而不是查找,因此不會比現在更好。 – NotDan 2012-01-16 19:05:12