首页 > 解决方案 > 带有中间件的 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,
];
}

标签: laravel

解决方案


您在 web.php 中有问题 - 不允许获取。使用 Route::group 或 Route::middleware

Route::middleware('roles:admin', function () {
     Route::get('/posts',[\App\Http\Controllers\ProductController::class,'posts']);
});

推荐阅读