多表用户认证

时间:2014-02-12 15:30:09

标签: php authentication laravel-4

我目前正在开发一个学生信息系统,教育组将使用该系统为学生和学生提供信息。老师是门户网站。

我使用的Laravel4内置了一个很好的身份验证驱动程序,但只能使用一个表进行身份验证。我无法弄清楚如何验证它们,因为我有多个表中的用户。示例:

  • SchoolOne_students
  • SchoolOne_teachers
  • SchoolTwo_students
  • SchoolTwo_teachers 等等....

3 个答案:

答案 0 :(得分:1)

一种明显更好的方式,而不是多个用户表,将每个用户链接到他们的学校和状态(教师或学生)。你当然可以扭曲Laravel做你想做的事情,但为了防止四种不同用户类型之间的冲突,你可能最终不得不重写整个身份验证包的大部分。

我要做的是,在您的用户表中,有一个ENUM列,其中包含选项studentteacher。然后,有一个整数列school_id(如果需要,还有一个单独的学校数据表)。这将提供更大的灵活性,当您的设计要求发生变化时(是的,他们更改),您将能够大步迈进。

使用此方法,您不必修改任何Laravel自己的代码。

答案 1 :(得分:0)

如果所有表都具有相同的模式,您可以创建一个视图来执行所有表的UNION,然后将该视图用作Laravel身份验证表。我并不是说这是一个理想的解决方案,但是如果您对更改现有表有限制并且必须按原样使用它们,这可能会有效。

视图无法更新(至少我不这么认为),因此添加或更新用户需要特定的添加/更新代码,但对于Auth,这可能会有所帮助。

CREATE VIEW users_combined_view
AS
SELECT id, username, password 
FROM schoolOne_students
UNION
SELECT id, username, password
FROM schoolOne_teachers
UNION
...

注意 - 如果username在表格中不唯一,这种方法会有点无用(好吧,完全没用)

答案 2 :(得分:0)

良好的数据库设计是可扩展的。 这尤其是一个坏主意:

SchoolOne_students SchoolOne_teachers SchoolTwo_students SchoolTwo_teachers and so on...

对于所有用户,应该只有一个表,对于students

Schools应该有另一个表格,其中将存储所有学校信息。

然后,您应该将students表加入schools表,方法是在school_id表中添加schools字段,其中school_id将存储在 ===Students Table=== 表中相应的学生排。


 +-----------------------------------------
 + id |  name  |school_id | ... | ... |
 +----+--------+----------+-----------+----
 + 1  |Student1|     5    | ... | ... |
 +----+--------+----------+-----------+----
 + 2  |Student1|     3    | ... | ... |

===Schools Table===


 +-----------------------------------------
 + id |  name  | ... | ... | ... |
 +----+--------+----------+-----------+----
 + 3  |School 3| ... | ... | ... |
 +----+--------+----------+-----------+----
 + 5  |School 5| ... | ... | ... |
 +----+--------+----------+-----------+----

{{1}}

通过这种方式,您可以添加任意数量的学校和学生

我希望这会有所帮助