// +---------------------------------------------------------------------- namespace app\model; use think\Model; use think\facade\Config; use think\facade\Env; use think\facade\Db; class BaseModel extends Model{ public function scopeUserauth($query, $where = []){ $auth = request()->auth(); $uid = request()->user['uid']; $map = []; if($uid != Env::get('admin')){ $subMap = []; if($auth['data_range'] == 2){ $subMap[] = ['department_id', 'IN', getDepartmentChild($auth['department_id'])]; }elseif($auth['data_range'] == 3){ $subMap[] = ['department_id', 'IN', $auth['department_id']]; }elseif($auth['data_range'] == 4){ $map[] = ['user_id', '=', $uid]; }else{ $m = [['user_id', '=', $uid], ['user_id', '=', 0]]; $query->where(function($q) use($m){ $q->whereOr($m); }); } if(!empty($subMap)){ $subsql = Db::name('users')->where($subMap)->field('uid')->buildSql(); $subsql = str_replace(" AS thinkphp) AS T1 )", "", $subsql); $subsql = str_replace("SELECT T1.* FROM (SELECT thinkphp.*, ROW_NUMBER() OVER ( ORDER BY rand()) AS ROW_NUMBER FROM (", "", $subsql); $map[] = ['user_id', 'IN', Db::raw($subsql)]; } } if(!empty($map)){ $query->where($map); } if(!empty($where)){ $query->where($where); } } }