Как сделать Global Policy / Middleware / Gate в Laravel для похожих запросов - PullRequest
0 голосов
/ 16 апреля 2020

Я использую Laravel 7 и это мои маршруты:

api. php

Route::group(['middleware' => ['auth:api']], function () {
  Route::get('posts/{id}', 'PostController@view');
  Route::delete('posts/{id}', 'PostController@destroy');
  Route::put('posts/{id}', 'PostController@update');
  /**
  *
  * Continues similar CRUD requests ...
  * 
  */
  Route::get('comments/{id}', 'CommentController@view');
  Route::delete('comments/{id}', 'CommentController@destroy');
  Route::put('comments/{id}', 'CommentController@update');
  /**
  *
  * Continues similar CRUD requests ...
  * 
  */
});

Я хочу только владельца идентификатора поста / comment / ... чтобы иметь возможность вносить изменения в них.

например: $post->user_id === $user->id

или если пользователь не является администратором ($user->role == 'admin').

Нет смысла создавать несколько политик (PostPolicy, CommentPolicy, TagPolicy ...), чтобы они делали одно и то же.

Я ищу одну глобальную политику / Разработка промежуточного программного обеспечения для аутентификации этих похожих запросов.

Например: ->middleware('isAdminOrself')

Как я могу это сделать?

...