Laravel限制用户只能通过全局范围查看相关对象

时间:2018-08-09 16:10:10

标签: laravel-5.6

我正在创建一个系统,希望通过使用全局范围来限制可能的安全隐患。我已经实现了一个,但是我觉得效率可能很低!

这是我的作用域类-

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();
}

我只是觉得必须有一种方法可以使它成为一个有效的查询,而不是两个?

谢谢!

0 个答案:

没有答案