Sql 多用户角色数据库的设计
我们很多人可能都遇到过这种情况。我想构建一个支持多个用户角色的应用程序,但不想在该过程中使用gems 我有4种类型的用户:Sql 多用户角色数据库的设计,sql,ruby-on-rails,ruby-on-rails-4,database-design,Sql,Ruby On Rails,Ruby On Rails 4,Database Design,我们很多人可能都遇到过这种情况。我想构建一个支持多个用户角色的应用程序,但不想在该过程中使用gems 我有4种类型的用户: Admin Teacher Student Librarian Admin很简单,他只需要两列,username和password。开头的用户表仅包含以下值: username, password, admin, teacher, student, librarian 列管理员、教师、学生、图书管理员是布尔值,用于定义用户是否具有特定角色。Admin将把Admin设置为
Admin
Teacher
Student
Librarian
Admin
很简单,他只需要两列,username
和password
。开头的用户表仅包含以下值:
username, password, admin, teacher, student, librarian
列管理员、教师、学生、图书管理员
是布尔值,用于定义用户是否具有特定角色。Admin将把Admin
设置为true
,所有其他列设置为false
当我们引入只针对一个角色的其他列时,问题就出现了。对于用户表,我们有以下列:
id
username
password
admin
teacher
student
librarian
teacher_column1
teacher_column2
teacher_column3
student_column1
student_column2
student_column3
etc...
id
username
password
admin
teacher
student
librarian
当用户被创建时,我们需要用空值填充很多列。如果我们创建一个教师,所有只需要图书管理员和学生的列都会被空值填充
在一些地方,当人们问到这一点时,建议他们进行STI,这样他们就可以这样结束:
class User < ActiveRecord::Base
end
class Admin < User
end
class Teacher < User
end
class Student < User
end
教师表:
user_id
teacher_column1
teacher_column2
teacher_column3
学生表:
user_id
username
password
student_column1
student_column2
student_column3
图书管理员和管理员也是如此。在检查角色后的用户创建过程中,将在特定表中为该用户创建新行
您对最后一种方法有何看法?利与弊
这是创建具有多个用户角色的系统的正确方法吗?谢谢。不要对每个权限使用不同的列 为具有以下列的用户创建单个表:
username
password
user_type
user\u type
将是%w{admin teacher student library}
中的一个值,然后使用单表继承,就像您在文章中提到的那样
为角色创建表:
name
然后创建一个表以将角色绑定到用户:
role_id
user_id
为权限创建表:
name
然后创建一个表以将权限绑定到角色:
permission_id
role_id
最后,您将拥有:
- 3个带表格的模型:
、用户
、权限角色
- 4个不带表格的模型,从
导入:用户
,管理员
,教师
,和学生
图书管理员
- 2个没有模型的表:
和用户\角色
角色\权限
角色中的用户
具有多态性
通过这种方式,您可以轻松创建新角色/权限,修改特定角色的权限,并轻松添加/删除特定用户的角色。我不确定您是否见过或是否是我使用最多的角色为什么不使用gems?您可以使用“多表继承”(在Heritage:中实现)以非常灵活的方式轻松解决问题。如果你需要更多的细节,我可以告诉你怎么做。谢谢你的建议。这一部分我仍然不清楚:4个没有表格的型号,从用户输入。您建议将所有这些额外的列保留在users
表中,并在与创建的用户无关的列中保留大量null
值?在我的例子中,我将有一个包含20列的users
表。