| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 | 
							- <?php
 
- namespace App\Scopes;
 
- use App\Service\RangeService;
 
- use Illuminate\Database\Eloquent\Builder;
 
- use Illuminate\Database\Eloquent\Model;
 
- use Illuminate\Database\Eloquent\Scope;
 
- //判断所属部门和顶级部门
 
- class DepartmentScope implements Scope
 
- {
 
-     public $user = [];
 
-     public $search = [];
 
-     public function __construct($user = [], $search = [])
 
-     {
 
-         $this->user = $user;
 
-         $this->search = $search;
 
-     }
 
-     public function apply(Builder $builder, Model $model)
 
-     {
 
-         //权限范围内的部门
 
-         $depart_range = $this->user['depart_range'] ?? [];
 
-         //我可见的
 
-         $is_see = $this->search['is_see'] ?? 0;
 
-         //可见范围方法
 
-         $range_function = $this->user['range_function'] ?? "";
 
-         $is_function_range = $this->hasMethod(new RangeService(),$range_function);
 
-         //顶级部门
 
-         $search_depart_id = $this->search['top_depart_id'] ?? 0; //顶级公司
 
-         if(empty($search_depart_id)){
 
-             //默认进来 自身顶级公司
 
-             $top_depart_id = $this->user['depart_top'][0] ?? [];
 
-             $top_depart_id = $top_depart_id['depart_id'] ?? 0;
 
-         }else{
 
-             //查询 顶级公司
 
-             $top_depart_id = $search_depart_id;
 
-         }
 
-         //顶级部门下 权限范围内部门的所有数据
 
-         $builder->where('top_depart_id', $top_depart_id)
 
-             ->whereIn('depart_id', $depart_range);
 
-         //加上可见范围 部门 人以后的数据
 
-         $id = [];
 
-         if($is_see && $is_function_range) $id = RangeService::$range_function($this->user);
 
-         $builder->orWhereIn('id', $id);
 
-         if(! empty($this->user['is_search_main'])) $builder->orWhere('is_main', '>',0);
 
-     }
 
-     function hasMethod($class, $methodName)
 
-     {
 
-         $reflection = new \ReflectionClass($class);
 
-         return $reflection->hasMethod($methodName);
 
-     }
 
- }
 
 
  |