Node.php 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php
  2. namespace App\Models;
  3. use Illuminate\Database\Eloquent\Model;
  4. use Illuminate\Database\Eloquent\Relations\HasMany;
  5. use Illuminate\Database\Eloquent\Relations\HasOne;
  6. /**
  7. * 节点配置信息
  8. */
  9. class Node extends Model {
  10. protected $table = 'ss_node';
  11. protected $guarded = ['id', 'created_at'];
  12. public function labels(): HasMany {
  13. return $this->hasMany(NodeLabel::class);
  14. }
  15. public function nodeHeartBeat(): HasMany {
  16. return $this->hasMany(NodeHeartBeat::class);
  17. }
  18. public function auth(): HasOne {
  19. return $this->hasOne(NodeAuth::class);
  20. }
  21. public function level_table(): HasOne {
  22. return $this->hasOne(Level::class, 'level', 'level');
  23. }
  24. public function scopeUserAllowNodes($query, $user_group_id, $user_level) {
  25. $userGroup = UserGroup::find($user_group_id);
  26. if($userGroup){
  27. $query->whereIn('id', $userGroup->nodes);
  28. }
  29. return $query->whereStatus(1)->where('level', '<=', $user_level?: 0);
  30. }
  31. public function getNodeAccessUsersAttribute() {
  32. return User::nodeAllowUsers($this->attributes['id'], $this->attributes['level'])->get();
  33. }
  34. public function getTypeLabelAttribute(): string {
  35. switch($this->attributes['type']){
  36. case 1:
  37. $type_label = 'ShadowsocksR';
  38. break;
  39. case 2:
  40. $type_label = 'V2Ray';
  41. break;
  42. case 3:
  43. $type_label = 'Trojan';
  44. break;
  45. case 4:
  46. $type_label = 'VNet';
  47. break;
  48. default:
  49. $type_label = 'UnKnown';
  50. }
  51. return $type_label;
  52. }
  53. }