Как использовать только одну модель в 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();
Другие вопросы по тегам