| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 | 
							- <?php
 
- namespace App\Model;
 
- use Illuminate\Database\Eloquent\Model;
 
- class UseScopeBaseModel extends Model
 
- {
 
-     //人员id字段
 
-     const employee_column = '';
 
-     public function __construct(array $attributes = [])
 
-     {
 
-         parent::__construct($attributes);
 
-     }
 
-     //顶级部门过滤
 
-     public function scopeTopClear($query, $user, $search)
 
-     {
 
-         //是否所有部门
 
-         $is_all_depart = $user['is_all_depart'] ?? 0;
 
-         //权限范围内的部门
 
-         $depart_range = $user['depart_range'] ?? [];
 
-         //顶级部门
 
-         $search_depart_id = $search['top_depart_id'] ?? 0;
 
-         if(empty($search_depart_id)){
 
-             //默认进来 自身顶级公司
 
-             $top_depart_id = $user['depart_top'][0] ?? [];
 
-             $top_depart_id = $top_depart_id['depart_id'] ?? 0;
 
-         }else{
 
-             //查询 顶级公司
 
-             $top_depart_id = $search_depart_id;
 
-         }
 
-         if($is_all_depart){
 
-             //所有部门
 
-             if(empty($search_depart_id)){
 
-                 //全部
 
-                 $query->whereIn('top_depart_id', $depart_range);
 
-             }else{
 
-                 //查看某个分社
 
-                 $query->where('top_depart_id', $top_depart_id);
 
-             }
 
-         }else{
 
-             //某个分社全部
 
-             $query->where('top_depart_id', $top_depart_id);
 
-         }
 
-         //获取当前门店下
 
-         if(! empty($search['get_my_top_depart_data'])){
 
-             $depart = ! empty($user['depart_top'][0]) ? $user['depart_top'][0]: [];
 
-             $depart_id = $depart['depart_id'] ?? 0;
 
-             $query->where('top_depart_id', $depart_id);
 
-         }
 
-         return $query;
 
-     }
 
-     public function scopeClear($query, $user, $search)
 
-     {
 
-         //权限范围内的部门
 
-         $depart_range = $user['depart_range'] ?? [];
 
-         $depart_range = array_column($depart_range,'depart_id') ?? [];
 
-         //个人 部门 所有
 
-         $auth_type = $this->getQx($search,$user);
 
-         // 获取模型的实例
 
-         $model = $query->getModel();
 
-         // 获取模型类名
 
-         $className = get_class($model);
 
-         // 人员字段
 
-         $column = defined($className . '::employee_column') ? constant($className . '::employee_column') : '';
 
-         $this->makeModel($query, $auth_type, $user, $depart_range,$column);
 
-     }
 
-     //最高权限
 
-     private function makeModel(&$query, $auth_type, $user, $depart_range, $column){
 
-         if(empty($column)) return;
 
-         if($auth_type == Employee::AUTH_ONE){
 
-             //我创建的
 
-             $query->where($column,$user['id']);
 
-         }elseif ($auth_type == Employee::AUTH_TWO){
 
-             if (empty($depart_range)) {
 
-                 $query->whereRaw('1 = 0');
 
-             } else {
 
-                 $query->whereExists(function ($q) use ($column, $depart_range) {
 
-                     $q->from('employee_depart_permission')
 
-                         ->whereColumn('employee_depart_permission.employee_id', $column)
 
-                         ->whereIn('employee_depart_permission.depart_id', $depart_range);
 
-                 });
 
-             }
 
-         }elseif ($auth_type == Employee::AUTH_THREE){
 
-             //所有
 
-         }
 
-     }
 
-     public function getQx($data, $user){
 
-         if(empty($data['menu_id'])) return Employee::AUTH_ONE; // 我的
 
-         if($user['id'] == Employee::SPECIAL_ADMIN) return Employee::AUTH_THREE; // 全部
 
-         if(! empty($user['role_authority'][$data['menu_id']])) {
 
-             //指定菜单 显示对应权限
 
-             return $user['role_authority'][$data['menu_id']];
 
-         }else{
 
-             return Employee::AUTH_ONE; // 我的
 
-         }
 
-     }
 
-     function hasMethod($class, $methodName)
 
-     {
 
-         $reflection = new \ReflectionClass($class);
 
-         return $reflection->hasMethod($methodName);
 
-     }
 
- }
 
 
  |