Арендодатель должен отлично работать для этого.
Арендодатель применяет глобальную область видимости к Eloquent, которая автоматически фильтрует записи.Он делает это на уровне ниже, чем Voyager в стеке, что означает, что вам не понадобится дополнительная конфигурация в конце Voyager.
С Landlord вы просто добавляете столбец ко всем вашим таблицам CRUD, которые идентифицируют владельцазаписи, а затем вы сообщите об этом Арендодателю.
Например, если вы укажете имя столбца user_id
, вы сможете затем охватить пользователя в любом месте (скажем, в промежуточном программном обеспечении) с помощью вызова какупрощенно как Landlord::addTenant('user_id', $userIdHere);
Вот пример промежуточного программного обеспечения:
<?php
namespace App\Http\Middleware;
use Closure;
use App\User;
use Landlord as LandlordManager;
class Landlord {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($request->user()) {
LandlordManager::addTenant($request->user());
LandlordManager::applyTenantScopesToDeferredModels();
}
}
}
Затем вы переходите к App/Http/Kernel.php
, находите массив $routeMiddleware
и добавляете:
'landlord' => \App\Http\Middleware\Landlord::class
Затем переходите к app/routes/web.php
и применить это промежуточное программное обеспечение к любому отдельному маршруту или группе маршрутов в соответствии с вашими предпочтениями в документации https://laravel.com/docs/master/middleware. Пример:
Route::group(['prefix' => 'admin', 'middleware'=>'landlord'], function () {
// routes here
});