我正在创建一个系统,希望通过使用全局范围来限制可能的安全隐患。我已经实现了一个,但是我觉得效率可能很低!
这是我的作用域类-
class ShopIds implements Scope {
/**
* Retrieves auth record
* @return User
*/
private function user () {
return auth()->user();
}
public function apply(Builder $builder, Model $model) {
$user = auth()->user();
// for shopkeepers, restrict the shops they can see to only their own
if($user instanceof User && $user->is_shopkeeper) {
$builder->whereIn('id', $user->getShopIds());
}
// return our builder
return $builder;
}
}
因此,正如您所看到的,我试图限制“商店老板”,使其只能看到通过shop_users数据透视表链接到的商店。首先,我要通过getShopIds()
方法获取所有商店ID,然后再通过这些ID限制所有后续查询。
这是我获取商店ID的方法-
public function getShopIds () {
// return our shop ID's
return DB::table('shop_user')
->where('user_id', $this->id)
->select('shop_id')
->pluck('shop_id')->toArray();
}
我只是觉得必须有一种方法可以使它成为一个有效的查询,而不是两个?
谢谢!