我正在考虑在 Rails 中创建基于角色的访问控制系统的方法。我也看到了这些伟大的项目(除其他外):
我的问题是,真的有必要为所有内容创建一个连接表吗?如果我关系中的一个表只有几个值(比如小于 100),我不能只将连接表与那个小表合并吗?)这就是我的意思......这就是我需要的:
楷模
- 用户
- 团体
- 角色
- 允许
- 用户角色/角色用户
- 组角色
- 成员资格(组用户)
- 角色权限
那样的东西...
RoleRequirement的工作方式是创建一个roles
表和一个roles_users
连接表。这意味着如果我在一个应用程序中有 20 个可能的角色,我有
- 20行角色表
- 包含 n 行的 RolesUsers 表。
这意味着每次我想按角色查找用户时,我都必须加入。不过我想知道,既然应用程序中只有几个角色,为什么不直接替换这个迁移:
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
这会导致重复(例如大量名为“admin”的角色),但是由于空间很便宜,而且我们可以创建一个方法Role.unique
来查找所有唯一角色(以摆脱那个 20 行表),为什么人们要创建连接表?
与权限相同:我可能只有 4 个权限开始:create read update delete
. 所以我不需要权限表和roles_permissions 表,我可以复制CRUD 权限并在权限表中拥有role_id。与组相同,如果我的表中有多态列,我不需要组角色roles
。
推荐的方法是什么?
这是建议迁移的片段。