*/ use HasApiTokens, HasFactory, Notifiable; protected $fillable = [ 'name', 'email', 'password', 'role_id', 'phone', 'job_title', 'department', 'department_id', 'status', 'skills', 'avatar', ]; protected $hidden = [ 'password', 'remember_token', ]; protected function casts(): array { return [ 'email_verified_at' => 'datetime', 'password' => 'hashed', 'skills' => 'array', ]; } public function role(): BelongsTo { return $this->belongsTo(Role::class); } public function dept(): BelongsTo { return $this->belongsTo(Department::class, 'department_id'); } public function departments(): BelongsToMany { return $this->belongsToMany(Department::class, 'department_user') ->withPivot(['role_in_team', 'is_primary', 'joined_at']) ->withTimestamps(); } public function roles(): BelongsToMany { return $this->belongsToMany(Role::class, 'role_user')->withTimestamps(); } public function hasPermission(string $permission): bool { foreach ($this->roles as $role) { if ($role->permissions->contains('name', $permission)) { return true; } } return false; } public function hasAnyPermission(array $permissions): bool { foreach ($permissions as $permission) { if ($this->hasPermission($permission)) { return true; } } return false; } public function managedProjects(): HasMany { return $this->hasMany(Project::class, 'project_manager_id'); } public function projects(): BelongsToMany { return $this->belongsToMany(Project::class, 'project_user')->withPivot('role_in_project')->withTimestamps(); } public function tasks(): HasMany { return $this->hasMany(Task::class, 'assignee_id'); } public function reportedTasks(): HasMany { return $this->hasMany(Task::class, 'reporter_id'); } public function comments(): HasMany { return $this->hasMany(Comment::class); } public function notifications(): HasMany { return $this->hasMany(Notification::class); } public function activityLogs(): HasMany { return $this->hasMany(ActivityLog::class); } public function meetingEffectivenessReviews(): HasMany { return $this->hasMany(MeetingEffectivenessReview::class); } }