hasMany(NodeLabel::class); } public function nodeHeartBeat(): HasMany { return $this->hasMany(NodeHeartBeat::class); } public function auth(): HasOne { return $this->hasOne(NodeAuth::class); } public function level_table(): HasOne { return $this->hasOne(Level::class, 'level', 'level'); } public function scopeUserAllowNodes($query, $user_group_id, $user_level) { $userGroup = UserGroup::find($user_group_id); if($userGroup){ $query->whereIn('id', $userGroup->nodes); } return $query->whereStatus(1)->where('level', '<=', $user_level?: 0); } public function getNodeAccessUsersAttribute() { return User::nodeAllowUsers($this->attributes['id'], $this->attributes['level'])->get(); } public function getTypeLabelAttribute(): string { switch($this->attributes['type']){ case 1: $type_label = 'ShadowsocksR'; break; case 2: $type_label = 'V2Ray'; break; case 3: $type_label = 'Trojan'; break; case 4: $type_label = 'VNet'; break; default: $type_label = 'UnKnown'; } return $type_label; } }