Использование Laravel Passport для доступа к своей учетной записи только на нескольких маршрутах - PullRequest
0 голосов
/ 18 февраля 2019

У всего моего приложения есть много API-маршрутов, которые обслуживают мой интерфейс с помощью ответов AJAX.Я использую защиту токенов Laravel Passport xsrf для защиты своих маршрутов и управления аутентификацией.Тем не менее, мы планируем предоставить API, который может потреблять определенный тип пользователей.Более подробно, вот (вымышленный) пример того, чего мы хотим достичь:

Компания может иметь много вакансий.Мои API-маршруты очень велики, и теперь я хочу дать владельцу компании возможность размещать все свои вакансии на нашем SDK и размещать их на своем веб-сайте.Проблема, с которой я сталкиваюсь: насколько я правильно понимаю паспорт, мне нужны персональные токены доступа.Я не хочу использовать функцию «войти в систему с моим приложением» (jet), как это отключить?Я хочу, чтобы только пользователь имел доступ к его собственной информации, а не от других пользователей.И я, вероятно, хочу в будущем позволить пользователю регистрироваться для различных API-интерфейсов.Так что у него есть несколько токенов доступа для разных маршрутов, но все маршруты объединены в один файл маршрутов api.php.Я думаю, что мне нужно было бы использовать области для этого, но как мне безопасно назначить области для токенов, поскольку это только один маршрут?

Может ли кто-нибудь помочь мне правильно понять концепцию паспорта?

1 Ответ

0 голосов
/ 18 февраля 2019

Я не использую паспорт, однако кажется, что эту проблему можно решить с помощью областей (не нужно привязывать к токену доступа).Если вы боретесь с получением аутентифицированного пользователя, вы можете следить за этим сообщением: Получить аутентифицированного пользователя с Laravel Passport и предоставить пароль

Если вы боретесь с тем, как написать свою сферу, вото чем я думаю

  • У вас есть таблица, содержащая компании с именем companies
  • У вас есть таблица с сотрудниками, которая называется employees
  • У вас есть таблица, содержащаявакансии под названием vacancies
  • У вас есть таблица соединений под названием company_employee

Теперь вы можете создать область действия для вашей Vacancy модели

class User {
    public function companies()
    {
        return $this->hasMany(App\CompanyEmployee::class)
    }
}

class Employee {

}

class Company {

}

class CompanyEmployee {

}

class Vacancy {
    public function scopeMine($query)
    {
        $my_companies = auth()
            ->user()
            ->companies()
            ->select('company_id')
            ->pluck('company_id')
            ->get()
            ->toArray();

        return $query->whereIn('company_id', $my_companies);
    }
}

Тогда независимо от того, как вы запрашиваете вакансии (через API или интерфейсный интерфейс), вы можете просто добавить область к вашему запросу, предположительно, в вашем контроллере.

class VacancyController {
    public function index()
    {
        return App\Vacancy::mine()->get();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...