Возможно ли применить политику Laravel к маршрутам и пользовательской функции? - PullRequest
0 голосов
/ 06 марта 2019

У меня есть Политика местоположения и один API и один пользовательский помощник для обоих. Я хочу использовать одну и ту же политику,

Вот пример:

1. Маршруты / API для чтения записи местоположения:

 Route::group(['middleware' => 'policy:view,location'], function () {
        // Read location
        Route::post('/locations/{location_id}', [
            'uses'       => 'LocationApiController@read'
        ]);
  });

2. Пользовательская функция / помощник для чтения записи местоположения

LocationHelper.php

/**
 * Class LocationHelper.
 */
class LocationHelper
{
    /** @var LocationRepositoryInterface */
    private $locationRepo;

    /**
     * ReminderHelper constructor.
     */
    public function __construct()
    {
        $this->locationRepo = App::make(LocationRepositoryInterface::class);
    }

    /**
     * @param int $locationId
     */
    public function readLocation($locationId)
    {
        $this->locationRepo->read($locationId);
    }
}

Проблема:

При вызове определения местоположения будет применяться политика маршрутизации / API, а при вызове функции чтения с LocationHelper.php она не будет применяться

Я хочу применить одну и ту же политику для обоих.

Есть ли способ сделать это ??

1 Ответ

1 голос
/ 06 марта 2019

Вы можете вызвать политику вручную, после получения пользователя. Например:

$allowed = Auth::user()->can('view', Location::firstOrFail($locationId));

Возвращает 403, если пользователю не разрешено просматривать ресурс, например:

abort_unless($allowed, 403); 
...