使用Laravel Passport仅在一些路线上访问自己的帐户

时间:2019-02-17 21:01:01

标签: php laravel api laravel-passport api-authorization

我的整个应用程序都有很多api路由,这些路由通过ajax响应为我的前端服务。我使用Laravel Passport xsrf令牌保护来保护我的路由和管理身份验证。但是,我们计划提供一种特定类型的用户可以使用的api。更详细地说,这是我们想要实现的(虚构)示例:

公司可以有很多空缺。 我的api路线很多,现在我想让公司所有者能够在我们的SDK上获取所有职位空缺并将其放置在他的网站上。我面临的问题:就我正确理解护照而言,个人访问令牌是我所需要的。我不需要“使用我的应用程序登录”功能(喷射),如何禁用此功能?我只希望用户访问自己的信息,而不希望其他用户访问。而且我可能将来希望让用户注册不同的api。这样他就可以针对不同的路由使用多个访问令牌,但是这些路由都集中在一个api.php路由文件中。我想我需要为此使用范围,但是如何安全地将范围分配给令牌,因为这仅是一条路由?

有人可以帮助我正确理解护照的概念吗?

1 个答案:

答案 0 :(得分:0)

我不使用护照,但是似乎可以通过合并范围解决此问题(不需要与访问令牌绑定)。如果您正在努力获取经过身份验证的用户,则可以关注以下信息: Get authenticated user with Laravel Passport and grant password

如果您正在为如何编写范围而苦苦挣扎,这就是我的想法

  • 您有一个包含名为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();
    }
}