php - Multi-Tenancy API 上的 Laravel Sanctum 主 key

标签 php laravel multi-tenant laravel-sanctum laravel-lighthouse

我正在尝试构建一个 Multi-Tenancy API,到目前为止,我的 API 运行良好,并且我成功地实现了 Multi-Tenancy (使用 archtechx/tenancy ),使用密室发行 key 进行身份验证也运行良好。

应用程序的结构例如有一个中心域example.com,有权访问该域的用户称为“ super 管理员”,他们应该能够使用其API token 进行访问(由 sainttum 在登录时发出)具有不受限制的访问权限的所有其他子域(或租户)API。

租户位于 tenant.example.com 等子域上,并拥有个人数据库,每个租户一个。

我正在考虑几个解决方案来实现这一点:

  1. 让 super 管理员模拟租户 API 的管理员并以管理员身份执行操作
  2. 找到一种方法向适用于每个租户(子域)的 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/

相关文章:

php - 在 Laravel 5 应用程序中将 Redis 配置为缓存接口(interface)

mongodb - Laravel 是否默认支持 MongoDB 或任何 NoSQL 数据库?

database-design - Multi-Tenancy 表是否应在主键和外键中包含TenantID?

Django Multi-Tenancy : how to customize django setting "ACCOUNT_EMAIL_VERIFICATION" per tenant?

javascript - 如何在 PHP 中将页面重定向到不带井号 (#) 的 URL?

laravel - 在 Lumen 中使用特定参数测试 POST 请求

php - mysqli_fetch_assoc 只返回数组的第一个元素

google-app-engine - 谷歌应用引擎 : Is it possible to allow users to add their own domain for a Multitenancy app?

javascript - 为什么 jQuery(document).ready 不工作?/如何将 CSS 添加到 jQuery 中的元素?

php - 用 PHP 解析 YAML 前端内容