0
我有一个数据库表为用户其中包含常见的领域,如密码,电子邮件等而且还有一个名为level
场定义用户级别,如成员,编辑或admin。数据库设计的多级用户与导轨
还有一些特定于其他人不需要的成员,编辑和管理员的字段。所以我认为我应该为用户类型创建分离的表格。
这就是问题; 如果我想遵循Rails的方式,我应该如何处理这个问题?无论在数据库设计和关联方面。
我有一个数据库表为用户其中包含常见的领域,如密码,电子邮件等而且还有一个名为level
场定义用户级别,如成员,编辑或admin。数据库设计的多级用户与导轨
还有一些特定于其他人不需要的成员,编辑和管理员的字段。所以我认为我应该为用户类型创建分离的表格。
这就是问题; 如果我想遵循Rails的方式,我应该如何处理这个问题?无论在数据库设计和关联方面。
似乎你正在寻找一个基于角色的授权系统,加上每个角色的特定属性。实现这一目标的一个方法是使用一个数据模型看起来像这样:
.-------.1 *.------------.* 1.-------.
| users |<-----| user_roles |------>| roles |
'-------' '------------' '-------'
|
.---------------+---------------------.
|0..1 |0..1 |0..1
.--------. .----------------------. .----------.
| points | | some_other_attribute | | room_ids |
'--------' '----------------------' '----------'
这种方式,可以确保与特定角色的所有属性,如果该角色从用户删除其删除(级联删除) 。
你都会有,不过,以确保所有的属性模型执行这样的验证规则:
class Point < ActiveRecord:Base
validates :relevant_association?
def relevant_association?
user_role.role.title == "Admin"
end
end
如果您的用户只能有一个角色,你可以通过在加入role
场简化这一模型,然后相应地在可选属性(即用户belong_to
)上编写验证规则。尽管如此,前一种模式为未来的调整提供了更多的潜力(创造新的角色只是创造新的记录)。
虽然我不是这方面的专家,所以你也可以继续寻求灵感;在declarative_authorization gem提供其数据模型的解释,你可能会觉得有趣,太:
includes includes .--. .---. | v | v .------. can_play .------. has_permission .------------. requires .----------. | User |----------->| Role |----------------->| Permission |<-----------| Activity | '------' * * '------' * * '------------' 1 * '----------' | .-------+------. 1/ | 1 \ * .-----------. .---------. .-----------. | Privilege | | Context | | Attribute | '-----------' '---------' '-----------'
你应该更具体的了解您的需求。那些额外的领域是什么?你认为你以后需要更多的“角色”吗?一个用户可以同时拥有多个“角色”吗?乍一看,我想说为不同的用户类型创建多个表是一个坏主意:用户是用户,无论其类型如何,并且风险最终都会在单独的表上出现重复。另一个建议是查看一些[授权宝石](https://www.ruby-toolbox.com/categories/rails_authorization)寻求灵感。 –
我也不想为用户使用多个表格,但用户类型需要'points'字段来执行某些操作,而其他用户类型则必须与'room'表格有关联,而其他用户类型则需要。因此,为每个用户创建'room_id',而他们并不需要它,这对我来说似乎有点不对劲。 “点”字段右侧也是这样吗?那么我应该在这种情况下使用多个表吗? –