Использование 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();
}
}