Назначить отдельное промежуточное ПО каждому методу ресурса в 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');
}