繁体   English   中英

具有多个用户角色的数据库设计

[英]Design of the database with multiple user roles

我们许多人可能都遇到过这种情况。 我想构建一个支持多个用户角色的应用程序,并且不想在该过程中使用gems。

我有4种类型的用户:

Admin
Teacher
Student
Librarian

Admin很简单,他只需要两列, usernamepassword 开头的用户表仅包含以下值:

username, password, admin, teacher, student, librarian

admin, teacher, student, librarian是布尔值,它们定义用户是否具有特定角色。 Admin将admintrue ,所有其他列设置为false。

当我们引入其他仅针对一个角色的列时,就会出现问题。 我们为用户表提供了以下列:

id
username
password
admin
teacher
student
librarian
teacher_column1
teacher_column2
teacher_column3
student_column1
student_column2
student_column3
etc...

创建用户时,我们需要用空值填充很多列。 如果我们创建教师,则只有图书管理员和学生所需的所有列都将填充为空。

在人们问这个问题的几个地方,建议他们做性传播感染,这样他们就可以像这样结束:

class User < ActiveRecord::Base

end

class Admin < User

end

class Teacher < User

end

class Student < User

end

这看起来好多了,但仍会引入很多空值。

另一个想法是针对不同的用户类型详细信息引入4个新表。 像这样:

用户表:

id
username
password
admin
teacher
student
librarian

老师桌:

user_id
teacher_column1
teacher_column2
teacher_column3

学生桌:

user_id
username
password
student_column1
student_column2
student_column3

图书馆员和管理员也一样。 在我们检查角色后的用户创建过程中,将在该用户的特定表中创建新行。

您如何看待最后一种方法? 缺点和优点?

这是创建具有多个用户角色的系统的正确方法吗? 谢谢。

请勿为每个权限使用不同的列。

使用以下列为用户创建一个表:

username
password
user_type

user_type将是%w{admin teacher student librarian}一个值,然后像您在帖子中提到的那样使用单表继承。

创建角色表:

name

然后创建一个表以将角色绑定到用户:

role_id
user_id

为权限创建表:

name

然后创建一个表以将权限绑定到角色:

permission_id
role_id

最后,您将获得:

  • 3个带表的模型: UserRolePermission

  • 4种不带表的模型,由User继承: AdminTeacherStudentLibrarian

  • 2个没有模型的表: users_rolesroles_permissions

另外,如果每种用户类型都有很多唯一的列,那么我建议为每个用户使用不同的模型+表,并使user处于“ Role多态”状态。

这样,您可以轻松创建新角色/权限,修改特定角色的权限以及轻松添加/删除特定用户的角色。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM