| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 | <?phpnamespace 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);    }}
 |