jeffersonsimaogoncalves/multitenancy-nova-tool

一个用于管理多租户的Laravel Nova工具。

v4.1.1 2022-04-04 03:46 UTC

This package is auto-updated.

Last update: 2024-09-30 01:52:12 UTC


README

Total Downloads

此包旨在与Multitenancy Package集成,以将多租户功能和管理引入Laravel的Nova

此包自动包含Multitenancy Package作为依赖项。请阅读文档了解如何将其集成到现有应用程序中。

index

create

安装

通过Composer安装此包

composer require jeffersonsimaogoncalves/multitenancy-nova-tool

然后按照安装说明设置Multitenancy Package。

接下来,您必须将工具注册到Nova中。这通常在NovaServiceProvidertools方法中完成。

// in app/Providers/NovaServiceProvider.php

public function tools()
{
    return [
        // ...
        new \JeffersonSimaoGoncalves\MultitenancyNovaTool\MultitenancyNovaTool,
    ];
}

此包需要超级管理员访问管理权限。这可以通过“角色 & 权限”下的包含的权限管理工具或通过我们的分配超级管理员命令来添加。

提示如果您已执行multitenancy:install,则已创建一个名为超级管理员的角色和附带的访问管理权限。因此,您只需将角色添加到用户即可。

php artisan multitenancy:super-admin admin@example.com

用法

安装此包后,在您的Nova应用程序中会出现新的菜单项,标记为“多租户”和“角色 & 权限”。

要查看用户详细视图中的租户关系,请向您的app/Nova/User资源添加一个BelongsToMany字段

// in app/Nova/User.php

use Laravel\Nova\Fields\BelongsToMany;

public function fields(Request $request)
{
    return [
        // ...
        BelongsToMany::make('Tenants', 'tenants', \JeffersonSimaoGoncalves\MultitenancyNovaTool\Tenant::class),
    ];
}

在每个可租户化的Nova资源中,都需要一个BelongsTo字段,以便查看与Tenant模型的关系

use Laravel\Nova\Fields\BelongsTo;

public function fields(Request $request)
{
    return [
        // ...
        BelongsTo::make('Tenants', 'tenant', \JeffersonSimaoGoncalves\MultitenancyNovaTool\Tenant::class),
    ];
}

定义反向关系

为了显示所有与Tenant模型相关的数据,您需要首先实现一个扩展包提供的模型的Tenant模型。

// in app/Tenant.php

namespace App;

use JeffersonSimaoGoncalves\Multitenancy\Models\Tenant as TenantModel;

class Tenant extends TenantModel
{
  // ... define relationships
    public function products()
    {
        return $this->hasMany(\App\Product::class);
    }
}

接下来,更新您的配置文件,将其指向您的新模型。

// in config/multitenancy.php

// ...
'tenant_model' => \App\Tenant::class,

然后创建一个扩展包资源的租户Nova资源。

// in app/Nova/Tenant.php

namespace App\Nova;

use Illuminate\Http\Request;
use Laravel\Nova\Fields\HasMany;
use JeffersonSimaoGoncalves\MultitenancyNovaTool\Tenant as TenantResource;

class Tenant extends TenantResource
{
    public static $model = \App\Tenant::class;

    /**
    * Get the fields displayed by the resource.
    *
    * @param  \Illuminate\Http\Request  $request
    * @return array
    */
    public function fields(Request $request)
    {
        return array_merge(parent::fields($request),
        [
            // ... define relationships
            HasMany::make('Products'),
        ]);
    }

}

中间件

为了将Nova结果范围限制为正在使用的租户,请向Nova添加中间件

// in config/nova.php

// ...

'middleware' => [
    // ...
    \JeffersonSimaoGoncalves\Multitenancy\Middleware\TenantMiddleware::class,
],

admin子域名下访问Nova将删除范围并显示所有结果。只有获得正确权限的用户,例如超级管理员,才能访问此子域名。

策略

默认情况下,多租户资源将仅对具有适当访问权限的用户在admin子域名中可见。您可以通过在项目中定义策略来覆盖策略,以允许对资源有更多访问权限。然后在您的AuthServiceProvider中注册策略

// in app/Providers/AuthServiceProvider.php

// ...
protected $policies = [
  // ...
    \JeffersonSimaoGoncalves\Multitenancy\Models\Tenant::class => \App\Policies\TenantPolicy::class,
];

您可以通过在config/multitenancy.php文件中设置策略文件来覆盖权限和角色模型策略。查找policies.rolepolicies.permission

报告问题

如果您在此插件或任何错误中遇到问题,请请在GitHub上打开一个问题。

鸣谢

此作品基于RomegaDigital的代码