Laravel Nova только доступ от конкретного охранника - PullRequest
0 голосов
/ 06 апреля 2019

В NovaServiceProvider есть:

protected function gate()
    {
        Gate::define('viewNova', function ($user) {
            return in_array($user->email, [
                'example@example.com',
            ]);
        });
    }

Но то, что я хотел бы сделать, это разрешить только людям из админской стражи , которые я настроил в config/auth длядоступ нова.В идеале все пользователи веб-службы должны получать 404 при доступе к любому URL-адресу Nova.

Этот вопрос для телескопа кажется похожим, но я не могу понять, где ядолжен определить это, и как сгенерировать 404 для веб-охраны.

Вопрос, который, вероятно, связан: что на самом деле означает viewNova в методе gate?

  • Могу ли я определить это конкретное действие для конкретного охранника в config/auth?(Я думаю, что где-то видел это, но не могу его найти)?
  • Кажется, что нет политики, написанной для Nova?

1 Ответ

1 голос
/ 06 апреля 2019

Оформить заказ vendor/laravel/nova/src/NovaApplicationServiceProvider.php.У него есть метод, который называется authorization:

/**
 * Configure the Nova authorization services.
 *
 * @return void
 */
protected function authorization()
{
    $this->gate();

    Nova::auth(function ($request) {
        return app()->environment('local') ||
               Gate::check('viewNova', [$request->user()]);
    });
}

Если среда была локальной, он позволяет всем получить доступ к панели, но если среда была чем-то другим, он проверяет определение метода viewNovaи он передает ему $request->user().

В том же файле есть метод gate(), который определил viewNova:

/**
 * Register the Nova gate.
 *
 * This gate determines who can access Nova in non-local environments.
 *
 * @return void
 */
protected function gate()
{
    Gate::define('viewNova', function ($user) {
        return in_array($user->email, [
            //
        ]);
    });
}

По сути, этот метод ничего не делает.Вы можете реализовать это в app/Providers/NovaServiceProvider.php (это реализация по умолчанию, которую вы видите в файле, и вы упомянули).В вашем случае вы можете реализовать это следующим образом:

/**
 * Register the Nova gate.
 *
 * This gate determines who can access Nova in non-local environments.
 *
 * @return void
 */
protected function gate()
{
    Gate::define('viewNova', function ($user) {
        Auth::guard('admin')->check();
    });
}

Возвращает true, если аутентифицированный в данный момент пользователь находится в admin охране.Надеюсь, я смогу ответить на все ваши вопросы.

...