Назначить отдельное промежуточное ПО каждому методу ресурса в laravel

Я использую пакет Zizaco / entrust laravel в качестве менеджера ACL для моего проекта.

Я знаю, что для ограничения доступа к группе маршрутов через промежуточное программное обеспечение и назначения ей роли (или разрешения) я должен сделать это следующим образом:

Route::group(['prefix' => 'admin', 'middleware' => ['role:admin']], function() {
    ....
});

Но я хочу назначить отдельное разрешение для разных маршрутов (методов) контроллера ресурсов.

Я знаю, что, как можно так, что для всего ресурса, но я не могу реализовать его для каждого метода контроллера:

Route::group(['prefix' => 'admin', 'middleware' => ['role:admin']], function() {
        Route::resource('/post', ['middleware' => ['permission:manage-posts'], 'uses' => 'PostController']);

    });

Я хочу дать это разрешение связанному методу:

'post-create' => public function create ()  
'post-edit' => public function edit()

и так далее.

3 ответа

Решение

Вы можете назначить промежуточное ПО в конструкторе вашего контроллера:

class Foo extends Conroller
{
    public function __construct() {

        $this->middleware('post-create', ['only' => ['create']]);

        $this->middleware('post-edit', ['only' => ['edit']]);
    }
}

Представьте, что у вас есть единицы измерения apiResource . Вы можете назначить разные промежуточные программы для отдельных конечных точек следующим образом:

      Route::middleware('role:seller|buyer')->group(function () {
    Route::apiResource('units-of-measure', UnitOfMeasureController::class)->only('index');
});

Route::middleware('role:seller')->group(function () {
    Route::apiResource('units-of-measure', UnitOfMeasureController::class)->except('index');
});

Конечная точка индекса будет доступна как продавцам, так и покупателям . Остальные конечные точки предназначены только для продавцов.

      <?php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Storage;
use Spatie\Permission\Models\Role;

class UserController extends Controller
{

    public function __construct()
    {
        $this->middleware('permission:read-user')->only('index','show');
        $this->middleware('permission:edit-user')->only('edit','update');
        $this->middleware('permission:delete-user')->only('delete');
        $this->middleware('permission:create-user')->only('create','store');
    }
Другие вопросы по тегам