【发布时间】:2019-03-01 06:39:03
【问题描述】:
我有一个使用不记名令牌进行身份验证的 API。不记名令牌是针对用户存储的。有一些中间件会检查请求中是否有有效的不记名令牌,如果没有则检查 401。
鉴于我可以从令牌中推断出用户,我希望将此 API 控制器中所有模型查找的范围限制为仅显示来自用户公司 ID 的结果。
Laravel 是否有一些巧妙的神奇方式来做到这一点? 还是我要在控制器构造函数中再次查找用户并将 where 子句添加到每个操作中?
基本上我想避免这样做:
public function __construct()
{
# 401 if there isn't a valid bearer token in the request
$this->middleware('apitokencheck');
# Boo to this
$user = UsersModel::where("api_token", $request->api_token)->first();
$this->companyContext = CompaniesModel::find($user->company_id);
}
...
public function get(Request $request)
{
# Boo to this also
$where = [
"company_id" => $this->companyContext->id
];
# Filters
return InspectionsModel::where($where)->get();
}
【问题讨论】:
-
你考虑过全局作用域吗?他们似乎是故意的:laravel.com/docs/5.7/eloquent#global-scopes
-
@dparoli 如果您将其作为答案,我会将其标记为正确,谢谢。