Asset.php 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <?php
  2. namespace App\Models;
  3. use App\Models\Enums\AssetACL;
  4. use App\Models\Scopes\CompanyScope;
  5. use EloquentFilter\Filterable;
  6. use Illuminate\Database\Eloquent\Builder;
  7. use Illuminate\Database\Eloquent\Factories\HasFactory;
  8. use Illuminate\Database\Eloquent\Model;
  9. use Illuminate\Support\Facades\Auth;
  10. /**
  11. * @method static \Illuminate\Database\Eloquent\Builder allowed()
  12. */
  13. class Asset extends Model
  14. {
  15. use HasFactory, Filterable;
  16. protected $fillable = [
  17. "name", "code", "description", "company_id", "status", "created_by",
  18. "owner", "address", "group_id", "geo_address_code", "acl",
  19. "whitelist", "latitude", "longitude","parent_id", "path",
  20. ];
  21. protected static function booted(): void
  22. {
  23. static::addGlobalScope(new CompanyScope);
  24. }
  25. public function scopeAllowed(Builder $query): void
  26. {
  27. $query->where(function (Builder $query) {
  28. return $query->where('acl', AssetACL::PRIVATE->value)->where('owner', Auth::id());
  29. })->orWhere(function (Builder $query) {
  30. return $query->where('acl', AssetACL::CUSTOM->value)->where('whitelist', 'like', '%' . Auth::id() . '%');
  31. });
  32. }
  33. public function children(){
  34. return $this->hasMany(Asset::class ,'parent_id');
  35. }
  36. public function requirements(){
  37. return $this->hasMany(Requirement::class ,'asset_id');
  38. }
  39. public function plans(){
  40. return $this->hasMany(Plan::class ,'asset_id');
  41. }
  42. public function projects(){
  43. return $this->belongsToMany(Project::class,'project_asset');
  44. }
  45. }