2012-01-14 54 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