Использование Laravel Passport для доступа к своей учетной записи только на нескольких маршрутах

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

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

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

1 ответ

Я не использую паспорт, однако кажется, что эту проблему можно решить с помощью областей (не нужно привязывать их к токену доступа). Если вы боретесь за получение аутентифицированного пользователя, вы можете следить за этим сообщением: Получить аутентифицированного пользователя с 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();
    }
}
Другие вопросы по тегам