Как использовать только одну модель в Laravel Gates
Я пытаюсь создать ворота в Laravel. Идея состоит в том, чтобы проверить, присутствует ли одна из ролей в токене доступа AzureAD.
Пока у меня есть это
Gate::define('admin_cml', function () {
return in_array(config('app-roles.cml_admin'),AzureUser::roles());
});
Пока что ответ - «Класс 'App \Models\AzureUser' не найден», даже если у меня есть «использовать App \Models\AzureUser»
Вот полный код
<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate;
use App\Models\AzureUser;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array<class-string, class-string>
*/
protected $policies = [
// 'App\Models\Model' => 'App\Policies\ModelPolicy',
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
Gate::define('admin_cml', function () {
return in_array(config('app-roles.cml_admin'),AzureUser::roles());
});
}
}
Есть идеи, почему не обнаруживает модель? Спасибо!
1 ответ
Ошибка исходит от AuthServiceProvider, где вы используете статический вызов метода, но это не статический...
AzureUser::roles();
Похоже, вы хотите использовать переменную экземпляра $this, поэтому вам нужно создать для нее экземпляр в AuthServiceProvider.php:
use App\AzureUser;
$azure = new AzureUser();
$roles = $azure->role();