| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- <?php
- namespace App\Model;
- use Illuminate\Database\Eloquent\Model;
- class DataScopeBaseModel extends Model
- {
- //人员id字段
- const employee_column = '';
- public function __construct(array $attributes = [])
- {
- parent::__construct($attributes);
- }
- //根据公司过滤
- public function scopeTopClear($query, $user, $search)
- {
- $top_depart_id = "top_depart_id";
- // 获取当前查询的表名或别名(这样无论你起什么别名 i 还是 item_details 都能自适应)
- $table = $query->getQuery()->from;
- // 如果 $table 里包含 " as ",说明有别名,截取别名部分
- if (strpos($table, ' as ') !== false) {
- $segments = explode(' as ', $table);
- $table = trim(end($segments));
- $top_depart_id = $table . '.top_depart_id';
- }
- $query->where($top_depart_id, $user['top_depart_id']);
- return $query;
- $query->where('top_depart_id', $user['top_depart_id']);
- return $query;
- }
- //数据权限中 人员 部门 所有 (在公司的基础上)
- public function scopeClear($query, $user, $search)
- {
- //权限范围内的部门
- $depart_range = $user['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){
- $query->where('top_depart_id', $user['top_depart_id']);
- 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['is_admin'] == Employee::IS_ADMIN_TWO) return Employee::AUTH_THREE; // 全部
- if(! empty($user['menu_permissions'][$data['menu_id']])) {
- //指定菜单 显示对应权限
- return $user['menu_permissions'][$data['menu_id']];
- }else{
- return Employee::AUTH_ONE; // 我的
- }
- }
- function hasMethod($class, $methodName)
- {
- $reflection = new \ReflectionClass($class);
- return $reflection->hasMethod($methodName);
- }
- }
|