我正在构建一个 Laravel 4 应用程序,它需要对 3 种实体类型进行登录身份验证:Coach、Student 和 Admin,它们都具有单独的用户界面。虽然我可以使用像 Sentry 2 这样的包和一个带有用户类型的单一 DB 用户表来实现这一点,但关于潜在的多态 DB 设计模式和可能出现的问题,我并不满意。过去使用以前的应用程序处理过多态问题,以及当您想要规范化数据库结构等时可能会造成的麻烦。为每种实体类型使用单独的数据库表似乎是更好的方法。
你会如何解决这个设计问题?
Laravel 4 auth 基本上使用以下文件:
- Auth.php(门面)
- AuthManager.php
- AuthServiceProvider.php
- 守卫.php
- auth.php(配置)
- User.php( Eloquent 模型)
我一直在尝试复制这些文件,为有效的 Coach 实体提供一个独立的身份验证,在 app.php 文件中注册外观和服务提供者,并对配置进行必要的更改使用 Coach Eloquent 模型进行身份验证:
- AuthCoach.php(外观)
- AuthCoachManager.php
- AuthCoachServiceProvider.php
- 守卫.php
- authcoach.php(配置)
- Coach.php( Eloquent 模型)
我仍在使用标准 Laravel 4 身份验证中的 Guard.php,但如果需要通过创建 GuardCoach.php 文件自定义用于教练身份验证的 Guard 方法,可以轻松扩展 Guard。
如果我要为每个实体类型分别进行身份验证,您认为这是实现它的好方法吗?
你能看出任何潜在的问题或知道更好的方法吗?
最佳答案
也许我不太了解你的上下文,但你为什么不使用基于角色的访问控制的基本概念并为不同的角色呈现不同的东西呢?如果这不够严格,您可以使用基于属性的身份验证策略来细化权限。您想要复制(即三重)身份验证逻辑的原因是什么?没有提到冗余数据库数据的事实(单独的用户表用于单独的用户类型?yuk!)?
如果您对 Sentry 不满意(就个人而言,我不使用该库),我可以推荐 Zizaco/Confide + Zizaco/Entrust 作为用户/角色/权限管理的干净优雅的解决方案。在这里查看 Zizaco GitHub .
一个快速的总体思路:
- 对整个应用使用单一的干净的身份验证机制
- 使用角色或角色+权限细化访问权限
- 将您的管理逻辑分离到单独的 Controller 中(AdminUserController、AdminCoachController 等等)
- 我认为在构建适当的 Blade 模板结构方面没有困难,可以很好地完成和组织这一切
您对多态性的关注点是什么?
如果您担心您的用户表会变得困惑,请将其作为存储身份验证详细信息的地方,并将所有其他必要的(非身份验证)用户详细信息放在另一个表中。
希望这对您有所帮助,如果我能很好地理解您的问题的话。
关于php - Laravel 4 多用户认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18672276/