Данная роль или разрешение должны использовать guard вместо «web». -Laravel

Я использую пространство пакетов для пользовательских ролей и разрешений. При создании и назначении роли пользователю я получаю сообщение об ошибке

The given role or permission should use guard `` instead of web

Ниже показано, как я сохраняю свои данные в контроллере.

Что могло вызвать эту проблему в моем приложении?

Контроллер

  $user = new User;
        $user->firstname = Input::get('firstname');
        $user->lastname = Input::get('lastname');
        $user->login = Input::get('login');
        $user->desc = Input::get('desc');
        $user->email = Input::get('email');
        // $user->group = Input::get('group');
        $user->password = Hash::make(Input::get('password'));
        $user->save();
        $user->assignRole(Input::get('roles'));

config / auth.php

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Authentication Defaults
    |--------------------------------------------------------------------------
    |
    | This option controls the default authentication "guard" and password
    | reset options for your application. You may change these defaults
    | as required, but they're a perfect start for most applications.
    |
    */

    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

    /*
    |--------------------------------------------------------------------------
    | Authentication Guards
    |--------------------------------------------------------------------------
    |
    | Next, you may define every authentication guard for your application.
    | Of course, a great default configuration has been defined for you
    | here which uses session storage and the Eloquent user provider.
    |
    | All authentication drivers have a user provider. This defines how the
    | users are actually retrieved out of your database or other storage
    | mechanisms used by this application to persist your user's data.
    |
    | Supported: "session", "token"
    |
    */

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | User Providers
    |--------------------------------------------------------------------------
    |
    | All authentication drivers have a user provider. This defines how the
    | users are actually retrieved out of your database or other storage
    | mechanisms used by this application to persist your user's data.
    |
    | If you have multiple user tables or models you may configure multiple
    | sources which represent each model / table. These sources may then
    | be assigned to any extra authentication guards you have defined.
    |
    | Supported: "database", "eloquent"
    |
    */

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\models\User::class,
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Resetting Passwords
    |--------------------------------------------------------------------------
    |
    | You may specify multiple password reset configurations if you have more
    | than one user table or model in the application and you want to have
    | separate password reset settings based on the specific user types.
    |
    | The expire time is the number of minutes that the reset token should be
    | considered valid. This security feature keeps tokens short-lived so
    | they have less time to be guessed. You may change this as needed.
    |
    */

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
        ],
    ],

];
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
10
0
11 877
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Вы должны проверить, есть ли в вашей модели

protected $guard_name = 'web';

Вам необходимо указать имя охранника в каждой модели, в которой вы используете диспетчер ролей.

Поскольку роли связаны с охранником, вы не можете применить роль к пользователю с другим охранником.

проверьте Документация

Спас мой день! Без этого атрибута spatie не может разрешить контроллеры в __constructor с использованием промежуточного программного обеспечения.

Marcos Regis 17.04.2020 01:39

У меня была такая же проблема, и это было из-за опечатки в пользовательской модели в config/auth.php. Также проверьте пространство имен класса User.

Защитой модели Laravel по умолчанию является «сеть». Вам не нужно его менять.

'users' => [
    'driver' => 'eloquent',
    'model' => App\Models\User::class,
],

Дох, я тоже перенял структуру папок моделей и забыл обновить. Ваше здоровье!

Chris 16.09.2019 16:12
class User extends Authenticatable
{
    // ...

    public function guardName(){
        return "web";
    }
}

Хотя этот код может предоставить решение вопроса, лучше добавить контекст, объясняющий, почему и как он работает. Это может помочь будущим пользователям изучить и в конечном итоге применить эти знания в своем собственном коде. Вы также можете получить положительные отзывы / голоса пользователей, когда объясните код.

Amit Verma 23.02.2021 04:05

У меня была такая же ошибка, и я переместил свою модель User в другую папку, когда я проверил файл auth.php, я заметил, что указатель на модель User неправильный, поэтому я изменил его на правильный путь, и проблема была решена.

Файл конфигурации Lravel по умолчанию для auth.php

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
    ],

    // 'users' => [
    //     'driver' => 'database',
    //     'table' => 'users',
    // ],
],

после того, как я изменил его на правильный путь

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => Domain\User\Models\User::class, // just change it to the path, which your `User` model exists
    ],

    // 'users' => [
    //     'driver' => 'database',
    //     'table' => 'users',
    // ],
],

Другие вопросы по теме