Laravel 5.7 + Spatie Permissions + JWT auth - PullRequest
0 голосов
/ 28 ноября 2018

Я настраиваю REST API, используя Laravel 5.7.Для проверки подлинности I JWT-auth и для разрешений и ролей я использую Spatie .

Моя проблема: при попытке связать роль с пользователем я получаю следующееошибка

Spatie \ Permission \ Exceptions \ RoleDoesNotExist
There is no role named admin.

Роль существует в базе данных: enter image description here

Вот как я пытаюсь назначить роль пользователю:

$user = User::findOrFail(1);
$user->assignRole('admin');

Поскольку я новичок в Laravel, я не уверен, что это актуально, но, установив JWT, мне пришлось изменить драйвер охранника в config/auth.php на jwt

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

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

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

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Я предполагаю, что вы вручную добавили роли в базу данных.Роли кэшируются, и это вызывает проблемы, если вы не используете встроенные методы создания.

use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;

$role = Role::create(['name' => 'writer']);
$permission = Permission::create(['name' => 'edit articles']);

Из документации GitHub

Вам нужно будет вручную очистить кэш с помощью php artisan cache:clear.

Лучший способ сделать это - использовать сеялку (для постоянных ролей) или Tinker , чтобы запустить код длясоздайте роли и разрешения, которые приведут к очистке кэша.

0 голосов
/ 28 ноября 2018

Проверьте пространство имен вашего приложения.Если вы обновили его с App, обязательно обновите его с config/auth.php.

С другой стороны, если вы не обновили пространство имен App, попробуйте очистить кэш и заново заполнитьтаблицы базы данных.

php artisan config:cache
php artisan cache:clear

Также проверьте модель пользователя, если у вас есть protected $guard_name = 'api';.

Надеюсь, это поможет.Ура!

...