2010-02-11 36 views
-1

我有3种型号改写协会导致

用户,公司和角色

用户belongs_to的角色 用户拥有,属于许多公司 角色HAS_ONE用户

直通这个协会,我可以这样做:
User.companies < - 我得到了用户拥有的所有公司
User.role < - 我得到了用户所属的角色

我现在在想,当一个用户有role_id == 0(admin)时,公司应该返回所有公司(Company.all)。要做到这一点,我想覆盖公司的方法,如果用户有role_id == 0,我会返回Company.all,否则我打电话超级。那是对的吗?如果是的话,我应该如何实现这个代码? 直接在我的用户模型中?我应该只扩展数组吗?

回答

1

我想说作出新的方法,companies_accessible,它决定哪些公司用户具有访问权限。

def companies_accessible 
    role_id == 0 ? Company.all : companies 
end 

无需污染现有的方法,特别是如果你以后需要确定哪些公司的管理确实确实自己。

+0

它的工作原理,但那么我将不得不改变它已经准备好的很多代码。 – 2010-02-11 15:11:12

+0

这对于理智的代码来说可能是值得的,并且可能不会超过跨项目查找和替换(当然,手动检查所有替换)。如果你使用IDE,它可能就是它。如果没有,有一些命令行工具可以为你做到这一点。 – Matchu 2010-02-11 15:21:25

+0

我不会采取这种方法。我会推翻这些公司并祈祷。无论如何,你独自回答,所以我会选择你的答案。 – 2010-02-11 15:27:47