如何在具有不同用户帐户的网站中组织登录表单?

时间:2015-12-29 08:42:55

标签: php mysql laravel

我正在使用laravel 5开发一个简单的简单网站,其中包含如下组织的不同用户帐户:

学生和管理员继承自用户。

示例用户表

  • 名称
  • 用户名
  • 密码
  • is_active / *仅在删除管理员时才需要。每个学生一定会活跃(1)* /
  • is_student
  • is_admin

样本学生表

  • 为学生包含一些更独特的字段

我可以有成千上万的学生,但只有几个管理员。目前,我的方法是在主页上有一个登录框,两个用户都可以登录,并根据用户类型显示相应的个人资料页面。 他们对这种方法有任何风险,还是他们有更好的方法来解决这个问题?

修改

应用域

  • 学生注册并申请实习
  • 管理员可以执行以下操作:
    • 管理网站上的评论(发布,删除等)
    • 管理常见问题解答(创建问题和解答)
    • 添加其他管理员用户

1 个答案:

答案 0 :(得分:0)

嗯,你可以这样走,我想这是一个偏好问题。我会使用不同的模型。

在模型上:我喜欢DDD(域驱动设计)和事件风暴,以深入了解我解决问题的领域。关于DDD:

  

为了创建优秀的软件,您必须知道该软件的用途。除非您对银行业务的理解有充分的了解,否则您无法创建银行业务软件系统,必须了解银行业务领域。

来自:Eric Evans的领域驱动设计。

Event storming是一种用于快速探索复杂业务领域的研讨会格式。

我对您的域名了解不多,所以我的答案基于许多假设。不过,它可能会对你有所帮助。

在这种情况下,我想我会将所有三个概念(AdminStudentUser)分开。即使他们可能共享某些属性,但在现实世界中他们也涉及不同的域。忽略这一事实,您的代码将很快涵盖令人讨厌的边缘情况,并包含不必要的复杂性。

因此,AdminStudent有两个不同的类。两个一个User。就我而言,这将导致三个不同的表格。有可能Student 还有Admin(以便管理,过滤概述等),但我只是在猜测那里

在所有三种情况下,我都会使用不可移动的value objects,不仅仅是为了完成代码,更重要的是用于封装数据,验证和暴露相关行为。

User登录,成功验证后会重定向到StudentAdmin的视图。您会注意到,当您的应用程序增长并变得更加复杂时,将这些域分开将是一个巨大的优势。您可以考虑在不同的域上使用单独的管理后端,但是现在我说它只会引入复杂性,几乎没有任何价值。

使用权限模拟系统中允许执行的操作可能很有价值。如:Admin允许执行任何操作,Student有一个或多个Privilege s。这将创建一个灵活的系统,其中一些学生可以帮助管理。例如:也许有些学生在一些随机学习小组的带领下,需要能够进入学习小组管理。现在可能没有必要,所以请确保您的代码对未来友好。

我将研究的其他主题:使用CQRS或CRUD,使用event store而不是关系数据库(如果您希望能够查看或重新回到历史记录中,则非常有用)

在任何情况下:不要选择最新的首字母缩略词,始终选择最适合您的域名(或上下文或应用程序)。