vidwan/tenant-buckets

自动为租户配置 AWS S3 存储桶。

v0.1.1 2022-05-21 13:58 UTC

README

Vidwan/Tenant-Buckets Latest Version on Packagist Tests Total Downloads

自动为每个租户配置 AWS S3 存储桶。它是 stancl/tenancy 的扩展。有关更多详细信息,请参阅 TenancyForLaravel

概念

概念很简单,即在租户注册时自动为租户提供一个新的 AWS S3 存储桶,并在中央数据库的租户表和数据列(在 tenant_bucket 下)中更新它。然后使用引导程序在租户上下文中运行时更新配置中的存储桶(filesystems.disks.s3.bucket),然后在中央上下文中恢复它。

路线图

  • 自动创建存储桶
  • 在租户引导程序中选择创建的存储桶。
  • 当租户被删除时删除存储桶。
  • 使用 Amazon S3 服务进行测试。

注意:我还没有在 生产环境 中测试此包或使用真实的 AWS S3 存储桶。我只是在 开发环境 中使用 MinIO 进行了测试。测试后,我将更新此信息。在此之前,如果您已测试,请随时提交 PR。

安装

您可以通过 composer 安装此包。

composer require vidwan/tenant-buckets

用法

1. 文件系统配置设置

确保您的 S3 配置具有以下所有键/值对

文件: config/filesystems.php

        's3' => [
            'driver' => 's3',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'region' => env('AWS_DEFAULT_REGION'),
            'bucket' => env('AWS_BUCKET'),
            'url' => env('AWS_URL'),
            'endpoint' => env('AWS_ENDPOINT'),
            'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
        ],

使用 Minio 进行开发?请确保更新您的 .env,添加 AWS_USE_PATH_STYLE_ENDPOINT=true

2. 租户配置

租户配置中有两部分需要处理。

部分 a

TenantBucketBootstrapper::class 添加到租户配置文件中的 bootstrappers

Vidwan\TenantBuckets\Bootstrappers\TenantBucketBootstrapper::class

文件: config/tenancy.php

    'bootstrappers' => [
        // Tenancy Bootstrappers
        Vidwan\TenantBuckets\Bootstrappers\TenantBucketBootstrapper::class,
    ],

部分 b

确保在 tenancy.filesystem.disks 配置中注释掉 s3,否则它将与租户本身冲突。

文件: config/tenancy.php

    'filesystem' => [
        'suffix_base' => 'tenant',
        'disks' => [
            'local',
            'public',
            // 's3', // Make sure this stays commented
        ],
    ],

3. 作业管道

Vidwan\TenantBuckets\Jobs\CreateTenantBucketVidwan\TenantBuckets\Jobs\DeleteTenantBucket 添加到 JobPipeline::make()。如名称所示,前者在租户创建时创建一个新的存储桶,后者在删除租户时删除它。

文件: app/Providers/TenancyServiceProviders.php

use Vidwan\TenantBuckets\Jobs\CreateTenantBucket;
use Vidwan\TenantBuckets\Jobs\DeleteTenantBucket;

...

    public function events()
    {
        return [
            // Tenant events
            ...
            Events\TenantCreated::class => [
                JobPipeline::make([
                    Jobs\CreateDatabase::class,
                    Jobs\MigrateDatabase::class,
                    Jobs\SeedDatabase::class,
                    // Your own jobs to prepare the tenant.
                    // Provision API keys, create S3 buckets, anything you want!
                    CreateTenantBucket::class, // <-- Place it Here
					
                ])->send(function (Events\TenantCreated $event) {
                    return $event->tenant;
                })->shouldBeQueued(false),
            ],
            ...
            Events\DeletingTenant::class => [
                JobPipeline::make([
                    DeleteTenantBucket::class, // <-- Place it Here
                ])->send(function (Events\DeletingTenant $event) {
                    return $event->tenant;
                })->shouldBeQueued(false),
            ],
            ...
        ];
    }

加油! 🥳

测试

composer test

变更日志

有关最近更改的详细信息,请参阅 CHANGELOG

贡献

有关详细信息,请参阅 CONTRIBUTING

安全漏洞

有关如何报告安全漏洞的详细信息,请参阅 我们的安全策略

致谢

许可证

MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件