erikfig / laravel-tenancy
Laravel 多租户包
dev-master
2019-03-20 19:54 UTC
Requires
- laravel/framework: 5.*
This package is auto-updated.
Last update: 2024-08-26 06:16:07 UTC
README
此包允许您通过最小修改创建适用于多个客户的应用程序。
状态:开发
安装
首先安装包
composer require erikfig/laravel-tenancy
然后发布配置文件
php artisan vendor:publish --provider=ErikFig\Laravel\Tenancy\Providers\TenancyServiceProvider
以下文件将被创建
- config/tenancy.php
- routes/tenancy.php
最后在数据库中创建表。
php artisan migrate
路由
新的路由文件(routes/tenancy.php
)仅对子域名开放路由,默认排除 www
。
在此文件中放置您项目的路由,这样我们还可以有针对主域名的独立路由(例如网站或市场)。
这是默认路由器
<?php
Route::get('/', function () {
return 'App Multi-Tenancy home';
});
Route::get('/tenancy', function () {
return 'App Multi-Tenancy';
});
配置
文件 config/tenancy.php
包含以下参数
route_param: Nome do parâmetro do subdominio na rota, altere somente para evitar incompatibilidades.
subdomains_pattern: Regex da url, exclui o `www` dos subdominios no formato padrão.
domain: O domínio em que vai rodar o projeto (sem www), se o valor for null, vai usar o que estiver em `url` do `config/app.php`.
userModel: Uma string com nome da classe (incluindo namespace) do model de autenticação (caso você tenha alterado o padrão)
助手
如果您需要使用当前子域名,请使用
get_subdomain();
配置认证模型
要配置认证模型(通常是 App\User),请添加 trait ErikFig\Laravel\Tenancy\UserTenancyTrait
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use ErikFig\Laravel\Tenancy\UserTenancyTrait;
class User extends Authenticatable
{
use Notifiable;
use UserTenancyTrait;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
}
当您请求数据时,pivot 表已包含权限
\App\User::with('tenancies')->get()
按子域名过滤模型记录
以下 trait 可以自动处理每个子域名的数据注册和列表,只需包含
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use ErikFig\Laravel\Tenancy\TenancyTrait;
class Product extends Model
{
use TenancyTrait;
}
过滤是通过 scope tenancy
实现的,因此您可以像通常一样处理它。
$all_products = \App\Product::withoutGlobalScope('tenancy)->get();
中间件
中间件仅限制对当前域中允许的用户访问。
要使用它,请将其添加到 app/Http/Kernel.php
中的 $routeMiddleware
变量
'tenancy' => \ErikFig\Laravel\Tenancy\Http\Middleware\TenancyAuthenticate::class,
与认证中间件一起使用
Route::middleware(['auth', 'tenancy'])->post('/tenancy', function () {
您还可以包含将访问路由的用户级别
Route::middleware(['auth', 'tenancy'])->post('/tenancy', function () {
return 'todos os níveis acessam';
});
Route::middleware(['auth', 'tenancy:owner'])->post('/tenancy', function () {
return 'somente usuários com role owner acessam';
});
Route::middleware(['auth', 'tenancy:employee'])->post('/tenancy', function () {
return 'somente usuários com role employee acessam';
});
Route::middleware(['auth', 'tenancy:owner|employee'])->post('/tenancy', function () {
return 'somente usuários com role owner e employee acessam';
});
管理租户
租户将是“企业”,这样您就可以将多个用户添加到多个租户中。
注册租户
use ErikFig\Laravel\Tenancy\Tenancy;
$owner = \Auth::user();
Tenancy::newTenancy('Nome da empresa', 'subdominio', $owner);
用户将被包含为 role
(访问级别)所有者(英文名称),您可以在中间件中按类型过滤用户。
向租户添加用户
use ErikFig\Laravel\Tenancy\Tenancy;
$user = \Auth::user();
$tenancy = Tenancy:where('route', get_subdomain())->first();
$tenancy->attachUser($user, 'editor');
登录用户将收到其已注册/创建的租户列表
dd($user->tenancies);
tenancies
属性是一个 belongsToMany
,因此请随意操作,哈哈。
贡献
发送您的 PR!
要查看/建议资源/错误,请使用 问题。