我試圖做的是從單個動作控制器中獲取角色資料,并在我從郵遞員那里測驗它時得到錯誤訊息。“訊息”:“呼叫未定義的方法 App\Models\User::auth()”,因為任何人都可以給我提示或解決此問題的解決方案將非常受歡迎。有關更多資訊,我使用 jwt 進行身份驗證,api 作為警衛。
所以讓我告訴你我的代碼。
控制器:
<?php
namespace App\Http\Controllers\Api\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\User;
class RoleController extends Controller
{
public function __invoke()
{
return User::auth()->user()->getRoleNames();
}
}
模型:
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable implements JWTSubject
{
use HasFactory, Notifiable, HasRoles;
protected $guard_name = "api";
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function getJWTIdentifier(){
return $this->getKey();
}
public function getJWTCustomClaims(){
return [];
}
}
路線:
//group route with prefix "admin"
Route::prefix('admin')->group(function () {
//route login
Route::post('/login', [App\Http\Controllers\Api\Admin\LoginController::class, 'index']);
//group route with middleware "auth"
Route::group(['middleware' => 'auth:api'], function() {
//data user
Route::get('/user', [App\Http\Controllers\Api\Admin\LoginController::class, 'getUser']);
//refresh token JWT
Route::get('/refresh', [App\Http\Controllers\Api\Admin\LoginController::class, 'refreshToken']);
//logout
Route::post('/logout', [App\Http\Controllers\Api\Admin\LoginController::class, 'logout']);
Route::prefix('authorization')->group(function () {
Route::get('/roles', RoleController::class);// not working
});
});
});
uj5u.com熱心網友回復:
有幾種方法可以嘗試獲得這些角色:
顯示所有角色名稱
Auth::user()->roles
$roles = $user->getRoleNames(); // Returns a collection
檢查用戶是否具有特定角色
Auth::user()->hasRole('admin')
檢查用戶是否有任何角色
Auth::user()->hasAnyRole(['super_admin', 'vendor'])
對于其他用法,請查看該站點: Spatie 角色和權限資訊
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/432546.html
標籤:拉拉维尔
上一篇:如何在PHP中將陣列轉換為物件
