laravel 11 目标类[角色]不存在(spatie/laravel-permission)

问题描述 投票:0回答:1

我正在开发 REST API laravel 11 应用程序,我安装了 spatie/laravel-permission 并且我可以在登录时成功创建用户并分配角色,我可以成功捕获令牌和角色,但是当我访问与角色管理员关联的路由时错误目标类[角色]不存在这是我的api.php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\AuthController;
use App\Http\Controllers\UserController;

Route::middleware('auth:api')->group(function () {

    Route::middleware('role:admin')->group(function () {
        Route::apiResource('users', UserController::class); 
    }
}

这是我的用户控制器,用于获取用户

use App\Models\User;
use Illuminate\Http\Request;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;

class UserController extends Controller
{
public function index()
    {
        $users = User::with('roles')->get();
        
        // Transform the response to include user details and their roles
        $response = $users->map(function ($user) {
            return [
                'id' => $user->id,
                'first_name' => $user->first_name,
                'last_name' => $user->last_name,
                'email' => $user->email,
                'phone_number' => $user->phone_number,
                'address' => $user->address,
                'roles' => $user->roles->pluck('name')
            ];
        });

        return response()->json($response);
    }
}

我的

user.php
模型

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Tymon\JWTAuth\Contracts\JWTSubject;
use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable implements JWTSubject
{
    use HasFactory, Notifiable, HasRoles;

 ....
}

我尝试在我的 api.php 中使用

use App\Http\Controllers\RolePermissionController;

Route::middleware('auth:api')->group(function () {

    Route::middleware([RoleMiddleware::class . ':admin'])->group(function () {
       Route::apiResource('users', UserController::class); 
    }
}

还是没有解决问题。也在 Laravel 11 上没有

http/kernel.php

php laravel jwt laravel-middleware laravel-permission
1个回答
0
投票

您可以在 bootstrap/app.php 中添加以下代码行,它应该可以完成工作。

->withMiddleware(函数 (中间件 $middleware) { $中间件->别名([ '角色' => RoleMiddleware::class, ]); })

© www.soinside.com 2019 - 2024. All rights reserved.