php - 使用 Laravel Passport 仅在少数路由上访问自己的帐户
问题描述
我的整个应用程序有很多 api 路由为我的前端提供 ajax 响应。我使用 Laravel Passport xsrf 令牌保护来保护我的路由并管理身份验证。但是,我们计划提供一个特定类型的用户可以使用的 api。更详细地说,这是我们想要实现的(虚构)示例:
一家公司可以有很多职位空缺。我的 api 路由很多,现在我想让公司所有者能够通过我们的 sdk 获取他所有的空缺并将它们放在他的网站上。我面临的问题:据我正确理解护照,个人访问令牌是我需要的东西。我不想要“使用我的应用程序登录”功能(jet),我该如何禁用它?我只希望用户访问他自己的信息,而不是其他用户。而且我可能希望将来让用户注册不同的api。这样他就可以为不同的路由拥有多个访问令牌,但是这些路由都在一个 api.php 路由文件中。我想我需要为此使用范围,但是我如何安全地将范围分配给令牌,因为这只执行单个路由?
有人可以帮助我正确理解护照的概念吗?
解决方案
我不使用护照,但似乎这个问题可以通过范围解决(不需要绑定到访问令牌)。如果您正在努力获取经过身份验证的用户,您可以关注这篇文章: 使用 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 或前端 GUI),您都可以简单地将范围添加到您的查询中,大概是在您的控制器中。
class VacancyController {
public function index()
{
return App\Vacancy::mine()->get();
}
}
推荐阅读
- javascript - 我如何获得输入字段的父级
- javascript - 更简单的方法将 onTap 功能绑定到微信小程序中的按钮
- react-native - 当我在本机反应中移回多个页面时,返回处理程序不起作用
- spring - Spring Integraton RSocket 和 Spring RSocket 交互问题
- ios - Swift Combine 属性继承在 Xcode 11.4 beta 2 / iOS 13.4 上引发“致命错误:调用已删除方法”
- javascript - 离子在垂直方向而不是水平方向上滑动
- html - 在html页面中显示ajax
- python-3.x - 如何在 Python3 中模拟没有读取权限的文件?
- regex - 如何在 tasker 的数组中获取特殊字符的位置
- azure - 由于订阅密钥无效,访问被拒绝