*/ use HasFactory, Notifiable, HasRoles; /** * The attributes that are mass assignable. * * @var list */ protected $fillable = [ 'name', 'email', 'password', ]; /** * The attributes that should be hidden for serialization. * * @var list */ 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 stations(): BelongsToMany { return $this->belongsToMany(Station::class); } /** * 获取用户可访问的线站 IDs * 空数组表示无限制(管理员) */ public function getAccessibleStationIds(): array { return $this->stations()->pluck('stations.id')->toArray(); } /** * 用户是否受线站限制 */ public function hasStationRestriction(): bool { return $this->stations()->exists(); } /** * 获取用户上传的所有文档 */ public function uploadedDocuments(): HasMany { return $this->hasMany(Document::class, 'uploaded_by'); } /** * 获取用户的所有下载日志 */ public function downloadLogs(): HasMany { return $this->hasMany(DownloadLog::class); } /** * 检查用户是否为超级管理员 */ public function isSuperAdmin(): bool { return $this->hasRole('super-admin'); } /** * 检查用户是否为管理员(包括超级管理员) */ public function isAdmin(): bool { return $this->hasAnyRole(['super-admin', 'admin']); } }