versa/tenancy-extension

一个用于扩展 Laravel 的 Tenancy For Laravel 包功能的 Laravel 扩展包。

1.0.0 2023-03-13 12:32 UTC

This package is auto-updated.

Last update: 2024-09-13 17:10:14 UTC


README

这是一个简单的 Laravel 的 Tenancy 扩展包,它提供了一种简单的方式来管理每个租户的 AWS S3 存储桶。

安装

使用 composer 安装包

composer require versa/tenancy-extension

用法

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),
        ],

2. 租户配置

BucketsBootstrapper::class 添加到 bootstrappers 下的租户配置文件中。

文件: config/tenancy.php

    'bootstrappers' => [
        // ...
        Versa\TenancyExtension\Bootstrappers\BucketsBootstrapper::class,
    ],

请确保在 tenancy.filesystem.disks 配置中将 s3 行取消注释。

文件: config/tenancy.php

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

3. 作业管道配置

Versa\TenancyExtension\Jobs\CreateTenantBucketVersa\TenancyExtension\Jobs\DeleteTenantBucket 添加到 JobPipeline::make()。这将确保在租户创建或删除时创建和删除存储桶。

文件: app/Providers/TenancyServiceProviders.php

    use Versa\TenancyExtension\Jobs\CreateTenantBucket;
    use Versa\TenancyExtension\Jobs\DeleteTenantBucket;

    // ...

    public function events(): array
    {
        return [
            // ...
            Events\CreatingTenant::class => [],
            Events\TenantCreated::class => [
                JobPipeline::make([
                    Jobs\CreateDatabase::class,
                    Jobs\MigrateDatabase::class,
                    Jobs\SeedDatabase::class,

                    CreateTenantBucket::class, // <-- Add this line

                ])->send(function (Events\TenantCreated $event) {
                    return $event->tenant;
                })->shouldBeQueued(false),
            ],
            // ...
            Events\TenantDeleted::class => [
                JobPipeline::make([
                    Jobs\DeleteDatabase::class,

                    DeleteTenantBucket::class, // <-- Add this line
                ])->send(function (Events\TenantDeleted $event) {
                    return $event->tenant;
                })->shouldBeQueued(false),
            ],
            // ...
        ];
    }

享受吧!😁