2

你可以在这里看到我的模型:

https://gist.github.com/768947

只是为了解释正在发生的事情,我有几个模型。在我的应用程序的核心,有:项目、阶段、上传、评论、用户。然后是角色和分配来管理用户授权。

我正在使用插件 declarative_authorization & design for login 执行此操作。

所以第一个问题是,在我的用户模型/表中添加一列“角色”并将每个用户的角色存储在那里更好吗?如果我有一个具有多个角色的用户,那么我可以将所有角色存储为一个数组并根据需要循环访问它们。

还是像我现在设置它那样做更好,我使用两个单独的表和一堆连接来设置分配?我只有 4 个角色:设计师、客户、管理员、超级用户。

从计算资源的角度来看,使用列执行每个查询比使用连接“更便宜”的意义上更好,或者差异不是那么显着吗?

我想,我的问题的根源是......现在,如果我想将一个项目分配给 current_user,我只需这样做current_user.projects.each do |project|并以这种方式循环它们。这是在我完成之后:@projects = current_user.projects在项目控制器中。这同样适用于我的所有其他模型——除了用户和角色。

但是,如果我想找到一个角色为“客户”的用户,它会很快变得令人费解。还是我把它复杂化了?

任何帮助,将不胜感激。

4

1 回答 1

2

我认为最好有单独的用户和角色表。这是一个多对多的关系,因为一个用户可以有很多角色,而很多用户可以有相同的角色。您需要一个 JOIN 表(例如 user_role)来执行此操作。我推荐三张桌子。当然,您将拥有用户和角色的主键;user_role 表将有两列,一个用于每个主键,以及与它们各自表的外键关系。

因此,现在如果您希望所有用户都具有“client”角色,那么在 user 和 user_role 之间进行简单的 JOIN。如果您想要特定用户的角色,则需要加入这三个表。

我不会推荐用户中的一系列角色。它违背了第一范式。

于 2011-01-07T12:37:18.773 回答