Как правильно записать в JWT роль пользователя в laravel/passport?

В Laravel/Passport есть несколько способов записи роли пользователя в JWT. Один из них - использование встроенной функции hasRole для проверки наличия роли у пользователей.

Для начала у вас должна быть реализована аутентификация пользователей с использованием Passport. После этого вам нужно будет расширить User модель, чтобы добавить метод hasRole для проверки роли пользователя.

1. Создайте новый метод hasRole в User модели Laravel. Можете использовать следующий код:

public function hasRole($role)
{
    return $this->role === $role;
}

2. Теперь вам нужно обновить метод createToken в аутентификационном контроллере для добавления роли в JWT. Расширьте метод createToken следующим образом:

public function createToken(Request $request)
{
    $user = User::where('email', $request->email)->first();

    if ($user && password_verify($request->password, $user->password)) {
        $token = $user->createToken('MyApp', [$user->role])->accessToken;
        return response()->json(['token' => $token]);
    } else {
        return response()->json(['error' => 'Invalid credentials'], 401);
    }
}

3. Теперь, когда пользователь успешно идентифицирован и токен JWT создан, вы можете получить доступ к роли пользователя через поле $user->role в JWT. Пример использования:

public function someProtectedRoute(Request $request)
{
    $user = $request->user();

    if ($user->hasRole('admin')) {
        // Действия, доступные только администраторам
    } else {
        // Действия для других ролей
    }
}

Теперь роль пользователя будет записана в JWT и вы можете использовать ее для проверки прав доступа к защищенным маршрутам.