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