lanos/vapor-tenant-buckets-new

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

1.0.3 2023-04-27 13:15 UTC

This package is auto-updated.

Last update: 2024-08-27 16:04:24 UTC


README

为每个租户自动配置 AWS S3 存储桶。这是 stancl/tenancy 的扩展。更多详情请参阅 TenancyForLaravel

致谢

这是 vidwanco/tenant-buckets 包的修改版,改为在 Laravel Vapor 上运行。根据 Vapor 的要求,应用了一个简单的修复来正确注入 AWS 凭据。

此外,对于较大的文件,Vapor 必须使用预签名 URL 并通过前端前置加载文件,因此已进行更改,以便在每个存储桶创建时启用正确的 CORS 策略。

概念

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

路线图

如果提供的更改合并到原始包中,则此存储库可能会停止使用,此时我们建议使用原始包。

注意: 我尚未在 生产环境 下或使用真实的 AWS S3 存储桶测试此包。我仅在 开发环境 下使用 MinIO 进行了测试。在 AWS S3 存储桶上进行测试后,我将更新此内容,并增加一个关于使用 aws-sdk-php 创建存储桶的 AWS IAM 策略设置的附加部分。在此之前,如果您已进行测试,请提交 PR。

安装

您可以通过 composer 安装此包

composer require lanos/vapor-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. 任务管道

JobPipeline::make() 中添加 Vidwan\TenantBuckets\Jobs\CreateTenantBucket

文件: app/Providers/TenancyServiceProviders.php

use Vidwan\TenantBuckets\Jobs\CreateTenantBucket;

...

    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),
            ],
            ...
        ];
    }

干杯! 🥳

测试

composer test

变更日志

请参阅 CHANGELOG 以获取有关最近更改的更多信息。

贡献

请参阅 CONTRIBUTING 以获取详细信息。

安全漏洞

请参阅 我们的安全策略 了解如何报告安全漏洞。

致谢

许可

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