我正在开发 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
您可以在 bootstrap/app.php 中添加以下代码行,它应该可以完成工作。
->withMiddleware(函数 (中间件 $middleware) { $中间件->别名([ '角色' => RoleMiddleware::class, ]); })