枚举与单独的表存储角色?

时间:2017-07-04 06:25:41

标签: mysql ruby-on-rails ruby-on-rails-4 enums

我必须在我的应用中实施角色系统以进行授权。我们的系统中有大约5种角色。

为了维护这些角色,我们有两个选项,

备选方案#1

1.在rails Role模型中创建枚举,

enum role: {super_admin: 1, translator: 2, approver: 3, sales_admin: 4, marketing_admin: 5, guest: 6}

2.在角色表中,现在我们将ID user_id role_id

备选方案#2

1.创建2个模型Role and Role_User

角色表仅包含ID | role_name,Role_User将包含ID | user_id | role_id

哪个应该首选?

3 个答案:

答案 0 :(得分:2)

我建议采用第二种方法,好像将来有任何额外角色的可能性,你不会有创建额外角色的负担。使用第一种方法,您必须编辑枚举以获取您可能希望在将来添加的其他角色

答案 1 :(得分:0)

单独表的另一个好处是,如果您的系统需要,用户可以拥有多个角色。此外,在数据库中存储不同的角色应该更好地强制实施数据库级数据完整性,即您不能向用户添加不存在的角色。

如果您最终使用单独的表作为角色和连接表,请确保为连接表添加正确的索引。

除此之外,它实际上取决于上下文和用例。如果系统足够简单,那么使用enum方式并没有错。

答案 2 :(得分:0)

这取决于角色的代码是如何融入代码的。有些系统有一个非常严格的概念" admin"或者"主持人"或"用户"并且引入不适合这些插槽的角色会导致混乱。在那些情况下,他们最好离开硬编码。您可能只需要一个表来将内部名称转换为标签,这在涉及翻译时尤其重要。 "管理"成为"管理员",或者您系统使用的其他语言中的任何含义。

如果您的系统具有更强的适应性,那么角色表可以定义任意权限,那么它就更有意义了。您可以创建可在系统结构中工作的自定义角色,因为系统是专门为其设计的。 A"角色"在这种情况下只是一组权限。