Как я могу позволить пользователю делать CRUD только на записи, созданной им / ею в Voyager Laravel? - PullRequest
0 голосов
/ 22 мая 2018

Я новичок в Laravel и Voyager

У меня есть один вопрос о Voyager.Дело в том, что я хочу, чтобы пользователь делал CRUD только для записей, созданных им / ею, чтобы записи других пользователей были ему недоступны, но он может добавлять, редактировать и удалять ТОЛЬКО свои записи.Как я могу заархивировать это в Voyager?Разрешения по умолчанию работают для всех записей, они не фильтруют записи, специфичные для пользователя: (

1 Ответ

0 голосов
/ 09 июля 2018

Арендодатель должен отлично работать для этого.

Арендодатель применяет глобальную область видимости к 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
});
...