为什么 laravel 基础用户可以登录背包的管理面板?

Why can laravel base users login into backpack's admin panel?

我刚刚发现背包,阅读了基本文档,安装了最新版本没有任何问题(laravel 6 在 homestead 环境中)。一切都很完美,添加了一些模块,对 cruds 进行了一些操作,等等。 不过,有一件事我不明白:为什么简单(基础 laravel)用户可以登录到管理面板? 我真的不喜欢在用户 table 中有一个 is_admin 列的想法,但更喜欢为管理员提供一个完全独立的 table 列。 在阅读文档时,我认为这是背包 v4+ 中的默认行为,但我显然误解了:)

更让我困惑的是背包护卫。如果它不阻止用户访问背包的管理面板,为什么它甚至存在?如果背包防护装置不能做任何事情,为什么不使用网络防护装置?

如果有人能向我解释这背后的概念以及我错过了什么,我将非常感激! link 一种完全分离背包和常规 laravel 用户身份验证的方法也很好 :)

干杯,

管理员和用户分离的最佳方式因项目而异。另外,这是见仁见智的问题。默认情况下,在 Backpack 中,我们试图满足 90% 的用例,并且大多数项目要么只有 管理员,要么将用户 存储在同一个 table 为了方便起见与管理员联系。但这就是我们使用不同守卫的原因,这样可以轻松更改默认行为。

Backpack 授权和 Laravel 授权的唯一共同点是用户模型。 你会注意到 App\Models\BackpackUser extends App\User。如果您想使用不同的 table 来存储您的管理员,这将使 admin/user 分离完成:

解决方案 1

  • 为您的管理员创建迁移和模型;你可以 start from Laravel's;
  • 使App\Models\BackpackUser extend App\Models\Admin代替User

解决方案 2

Use your own model 而不是 BackpackUser。如果您需要保留密码重置功能,您还应该在新的 Admin 模型上使用 BackpackUser 中的特征和方法。

希望对您有所帮助。

--

PS。 Backpack 从使用 Laravel 的 auth 开始,多年来已经开始使用单独的视图、控制器、守卫等——为了让开发人员更容易根据他们的各种需求定制它。 到目前为止,很少 人抱怨使用 users table 来存储管理员,所以我们保持这种方式。如果您认为 默认 应该是一个单独的 admins table,我建议您 open a thread in our Github 并给团队和社区这样做的理由。如果有足够多的人支持一项变革,它通常会得到实施。