我正在考虑在Rails中创建基于角色的访问控制系统的方法。我也看到了这些伟大的项目(等):

我的问题是,真的有必要为所有内容提供一个联接表吗?如果我恋爱中的一张表只有几个值(例如少于100),我不能只是将加入表与该小表合并吗?)这就是我的意思...这就是我需要的:

楷模

  • 用户
  • 团体
  • 角色
  • 允许
  • 用户/角色
  • grouproles
  • 会员资格(小组使用者)
  • rolepermissions

这样的东西...

道路 RoLerequirement 作品是创建一个 roles 桌子和 roles_users 加入表。这意味着,如果我在应用程序中有20个可能的角色,我有

  • 有20行的角色表
  • 带有n行的角色苏子表。

这意味着每次我想通过角色找到用户时,我都必须加入。不过,我想知道,由于应用程序中只有几个角色,所以为什么不替换此迁移:

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权限并在权限表中具有coole_id。与组一样,如果我在我的多态列中,我不需要小组角色 roles 桌子。

推荐的方法是什么?

这里有一个 拟议迁移的片段.

有帮助吗?

解决方案

我不建议你这样做。您所描述的称为 否定化.

译本引入了许多应用程序的问题,只有在您有明确的情况下才能做到 需要 为了它。我通常只为报告目的不规范表。

您的问题并没有表明您有任何符合性的规范化。相反,它表现出对拥有“额外”表的误导性的厌恶,并避免简单的连接。复制数据的成本不仅仅是空间,还要花费性能(唯一不是免费赠品)。现代RDBM非常擅长处理连接。

我建议谷歌搜索和搜索,以了解有关统计化的信息。没有黄金法则,但是您的案子似乎没有任何充分的理由。

如果您正在寻找性能提高,请将ActivereCord扔进垃圾桶。有很多替代方法,您可以写自己的替代品。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top