*/ protected $fillable = [ 'name', 'email', 'password', ]; public function getRouteKeyName() { return 'email'; } /** * The attributes that should be hidden for serialization. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; /** * Get the attributes that should be cast. * * @return array */ protected function casts(): array { return [ 'email_verified_at' => 'datetime', 'password' => 'hashed', ]; } public function posts() { return $this->hasMany(Post::class); } public function postsPercent() { if (Post::count() == 0) { return 100; } return $this->posts()->count() * 100 / Post::count(); } public function products() { return $this->hasMany(Product::class); } public function productsPercent() { if (Product::count() == 0) { return 100; } return $this->products()->count() * 100 / Product::count(); } public function tickets() { return $this->hasMany(Ticket::class); } public function ticketsPercent() { if (Ticket::count() == 0) { return 100; } return $this->tickets()->count() * 100 / Ticket::count(); } public function comments() { return $this->morphMany(Comment::class,'commentator'); } public function commentsPercent() { if (Comment::count() == 0) { return 100; } return $this->comments()->count() * 100 / Comment::count(); } public function logs() { return $this->hasMany(AdminLog::class, 'user_id', 'id'); } public function accesses(){ return $this->hasMany(Access::class); } public function hasAnyAccess($name){ if ($this->hasRole('SUSPENDED')){ return false; } if ($this->hasRole('admin') || $this->hasRole('developer')) { return true; } return $this->accesses()->where('route','LIKE','%.'.$name.'.%')->count() > 0; } public function hasAnyAccesses($array){ if ($this->hasRole('SUSPENDED')){ return false; } if ($this->hasRole('admin') || $this->hasRole('developer')) { return true; } foreach ($array as $access){ if ($this->hasAnyAccess($access)){ return true; } } } public function hasAccess($route){ if ($this->hasRole('SUSPENDED')){ return false; } return $this->accesses()->where('route',$route)->count() > 0; } }