laravel - 带有中间件的 Laravel 用户角色不起作用
问题描述
我有一个 Laravel 项目,我在其中使用中间件来创建像管理员/版主这样的用户角色,并且我只想限制对路由的访问。我有一个带有角色列的用户表,其中我的用户角色是“管理员”。当我进入 web.php 中的 /posts 页面时,我应该能够访问它,因为我是管理员,但由于某种原因,我找不到 404。有人可以帮帮我吗?
网页.php
<?php
use Illuminate\Support\Facades\Route;
Route::get('types', function () {
Route::get('/posts',[\App\Http\Controllers\ProductController::class,'posts']);
})->middleware('roles:admin');
应用程序/Http/Controllers/ProductController.php
public function posts(){
$product = Product::orderBy('created_at', 'desc')->paginate(21);
return view('posts', ['products' => $product]);
}
app/Http/Middleware/UserRoles.php
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class UserRoles
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next, ...$roles)
{
return collect($roles)->contains(auth()->user()->roles) ? $next($request) : back();
}
}
内核.php
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
use App\Http\Middleware\UserRoles;
class Kernel extends HttpKernel
{
protected $routeMiddleware = [
'roles' => UserRoles::class,
];
}
解决方案
您在 web.php 中有问题 - 不允许获取。使用 Route::group 或 Route::middleware
Route::middleware('roles:admin', function () {
Route::get('/posts',[\App\Http\Controllers\ProductController::class,'posts']);
});