我正在尝试构建一个 Multi-Tenancy API,到目前为止,我的 API 运行良好,并且我成功地实现了 Multi-Tenancy (使用 archtechx/tenancy ),使用密室发行 key 进行身份验证也运行良好。
应用程序的结构例如有一个中心域example.com
,有权访问该域的用户称为“ super 管理员”,他们应该能够使用其API token 进行访问(由 sainttum 在登录时发出)具有不受限制的访问权限的所有其他子域(或租户)API。
租户位于 tenant.example.com
等子域上,并拥有个人数据库,每个租户一个。
我正在考虑几个解决方案来实现这一点:
- 让 super 管理员模拟租户 API 的管理员并以管理员身份执行操作
- 找到一种方法向适用于每个租户(子域)的 super 管理员颁发“主 key ”
我倾向于第二种解决方案,因为我发现它更优雅。我一直在网上搜索此类问题/功能的最佳实践,但没有找到任何与我的问题完全匹配的内容。
总而言之,解决方案 2 可行吗?如果是这样,有没有办法用 Sanctuary 发放这样的“万能 key ”?
我正在使用:
Laravel 8.48.1
Lighthouse-php作为通过 Laravel 服务 GraphQL 的框架
Sanctum 作为身份验证守卫
Tenancy for Laravel作为 Multi-Tenancy 包
最佳答案
主键
一个简单的想法:你可以设置 token abilities为 Sanctuary 代币。也许您可以创建master:access
或类似的功能,作为主 key
?您可以在为 super 管理员创建 API token 时授予他们 master:access
能力。
这确实需要租户
访问master
数据库并授权该特定 key 的能力。我不知道该包的具体实现,但我之前合作过的 Tenancy 项目提供了对 master
数据库的轻松访问。您可以实现某种中间件或授权来检查用户是否拥有具有 master:access
功能的 token 。
冒充用户
您提出的其他模拟解决方案似乎也是可能的,并且是根据 package documentation 由软件包提供的。这确实要求每个租户都拥有某种admin
用户。由于所有 super 管理员
都可以访问超过 1 个共享管理员
用户的租户,因此我不建议选择此选项。
关于php - Multi-Tenancy API 上的 Laravel Sanctum 主 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68194408/