我在考虑如何在Rails中创建基于角色的访问控制系统。我看到这些伟大的项目太多(其中包括):在Rails中消除HasMany关系中的连接表
我的问题是,是否真的需要有一个连接表为了一切?如果我关系中的一个表只有少数值(比如小于100),我不能只将合并表与该小表合并吗?)这就是我的意思......这就是我需要的:
模型
- 用户
- 组
- 角色
- 权限
- 的UserRole/RolesUsers 个
- GroupRoles
- 成员(GroupUsers)
- RolePermissions
类似的东西...
的方式RoleRequirement作品是通过创建一个roles
表和roles_users
连接表。这意味着,如果我在一个应用20个总的可能角色,我有20行
- 角色表。
这意味着每次我想通过角色找到一个用户,我必须做一个连接。我想知道,不过,因为只会出现在应用程序中几个角色,为什么不直接替换此迁移:
create_table "roles", :force => true do |t|
t.string "name"
end
create_table "roles_users", :id => false, :force => true do |t|
t.integer "role_id"
t.integer "user_id"
end
与此一...
create_table "roles", :force => true do |t|
t.string "name"
t.integer "user_id" # or some polymorphic form
end
会导致重复(吨的角色名为“管理”为例),但由于空间很便宜,我们可以创建一个像Role.unique
这样的方法来查找所有独特的角色(摆脱那20行表),为什么人们创建连接表?
同样的事情与权限:我只可能有4个权限开始:create read update delete
。所以我不需要权限表和roles_permissions表,我可以复制CRUD权限并在权限表中拥有role_id。与Group相同,如果我的roles
表中有多态列,则不需要组角色。
这样做的建议方法是什么?
非常感谢。刚开始的时候,我读到了非规范化的问题,以及有多少人认为RDBMS比CouchDB更令人讨厌。没有丰富的数据库管理经验,我不知道在如何划分数据以及何时加入成为问题(性能和维护方面)方面有哪些最佳实践。你有没有可靠的资源来缓解我对“有额外表格的厌恶”:)。这将有助于! – 2010-02-20 05:03:08
http://www.codinghorror.com/blog/2008/07/maybe-normalizing-isnt-normal.html – hobodave 2010-02-20 06:19:54