首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel 4多用户认证

Laravel 4多用户认证
EN

Stack Overflow用户
提问于 2013-09-07 10:18:32
回答 2查看 5K关注 0票数 7

我正在构建一个Laravel 4应用程序,它需要3种实体类型的登录身份验证:教练、学生和管理,所有这些都有单独的用户界面。虽然我可以使用Sentry 2这样的包和带有用户类型的单个DB用户表来实现这一目标,但是对于可能出现的多态DB设计模式和问题,请不要对我坐视不管。在过去处理过以前的应用程序中的多态问题,以及当您想要规范您的DB结构时它可能造成的痛苦,等等,为每种实体类型设置单独的DB表似乎是一个更好的方法。

你将如何解决这个设计问题?

Laravel 4 auth基本上使用以下文件:

  • Auth.php (正面)
  • AuthManager.php
  • AuthServiceProvider.php
  • Guard.php
  • auth.php (配置)
  • User.php (雄辩模型)

我已经尝试过复制这些文件,以便为工作的coach实体提供一个独立的auth,在app.php文件中注册外观和服务提供者,并对配置进行必要的更改,以使用Coach雄辩模型进行身份验证:

  • AuthCoach.php (正面)
  • AuthCoachManager.php
  • AuthCoachServiceProvider.php
  • Guard.php
  • authcoach.php (配置)
  • Coach.php (雄辩模型)

我仍然在使用来自标准Laravel4auth的Guard.php,但是,如果需要通过创建一个GuardCoach.php文件来定制用于教练身份验证的守护方法,那么可以很容易地扩展GuardCoach.php。

如果我要为每种实体类型分别使用auth,您认为这是实现这一目标的好方法吗?

你能看到任何潜在的问题或者知道更好的方法吗?

EN

回答 2

Stack Overflow用户

发布于 2013-09-07 11:01:04

也许我不太理解您的上下文,但是为什么不直接使用基于角色的访问控制的基本概念,为不同的角色提供不同的内容呢?如果不够紧,可以使用基于属性的auth策略来授予权限。你想复制(三重)逻辑的原因是什么?没有提到冗余db数据的事实(单独的用户表用于单独的用户类型?)啊!)?

如果你对Sentry不满意(我个人不使用这个库),我可以推荐Zizaco/Confide + Zizaco/Entrust作为一个干净优雅的用户/角色/权限管理解决方案。看看这里,Zizaco GitHub

一个快速的总体想法:

  • 对整个应用程序使用单一的清洁身份验证机制
  • 角色或Roles+Permissions的粒度访问
  • 将您的管理逻辑分离成单独的控制器(AdminUserController,AdminCoachController,任何..)
  • 我不认为有困难的组成适当的叶片模板结构,使它做得很好,组织得很好。

你的多态关注点是什么?

如果您担心您的用户表会变得杂乱无章,请将其保留为存储auth详细信息的地方,并将所有其他必需的(非auth)用户详细信息放在另一个表中。

希望这能帮助你,只要我能很好地理解你的问题。

票数 3
EN

Stack Overflow用户

发布于 2013-09-09 13:57:22

我想你是想用木槌拍蚊子。

下面是我如何处理同样的问题:

  • 我希望确保每个用户的身份验证(用户名、密码)都存储在同一个表中。基本上我有三种类型的用户。
  • 我使用了Sentry 2,这使得管理身份验证变得非常容易。
  • 使用Sentry 2提供的默认迁移,我在“users”表中添加了一列“角色”--它区分了3种类型的用户。
  • 对于每个用户类型,我创建了一个具有特定字段的表。
  • 当用户通过身份验证时,我会从“user”表中获取他们的“角色”,运行一些if语句,并知道要为他们服务的视图。

蚊子已经完全死了。

转到您的:

  • 基本上,我们的两种方法都是相同的--因为每个用户类型都有一个单独的表,用于他们并不都共享的字段(除了名字、姓氏、电子邮件、密码、最后登录等等)。
  • 您的方法将允许用户属于这三个实体--这在逻辑上是不正确的。我的不会-这在逻辑上是.
  • 你害怕“多态问题”,但我不认为我们在这里有太多要处理的问题。我们可能要做的就是在我们的模型中定义一个教练,例如,belongsTo用户。和一个用户hasOne教练。
  • 但在现实中,我们甚至不需要定义关系。因为在身份验证时,我们无论如何都需要运行if语句。因此,使用身份验证返回的user对象,我们将知道两件事:然后转到哪个表以获取用户类型的指定信息,以及向经过身份验证的用户提供哪个视图。

别害怕,儿子

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18672276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档