'datetime', 'user_permissions_expires_at' => 'datetime', 'created_at' => 'datetime', 'updated_at' => 'datetime' ]; /** * The attributes that should be mutated to dates. * * @var array */ protected $dates = [ 'user_permissions_granted_at', 'user_permissions_expires_at', 'created_at', 'updated_at' ]; /** * Get the user that owns the permission. */ public function user(): BelongsTo { return $this->belongsTo(User::class, 'user_permissions_user_id'); } /** * Get the company that owns the permission. */ public function company(): BelongsTo { return $this->belongsTo(Company::class, 'user_permissions_bus_id'); } /** * Get the user who granted the permission. */ public function grantedByUser(): BelongsTo { return $this->belongsTo(User::class, 'user_permissions_granted_by'); } /** * Check if permission is expired. * * @return bool */ public function isExpired(): bool { return $this->user_permissions_expires_at && $this->user_permissions_expires_at->isPast(); } /** * Check if permission is active. * * @return bool */ public function isActive(): bool { return !$this->isExpired(); } /** * Scope to get only active permissions. * * @param \Illuminate\Database\Eloquent\Builder $query * @return \Illuminate\Database\Eloquent\Builder */ public function scopeActive($query) { return $query->where(function ($q) { $q->whereNull('user_permissions_expires_at') ->orWhere('user_permissions_expires_at', '>', Carbon::now()); }); } /** * Scope to get permissions for a specific user. * * @param \Illuminate\Database\Eloquent\Builder $query * @param int $userId * @return \Illuminate\Database\Eloquent\Builder */ public function scopeForUser($query, int $userId) { return $query->where('user_permissions_user_id', $userId); } /** * Scope to get permissions for a specific company. * * @param \Illuminate\Database\Eloquent\Builder $query * @param int $companyId * @return \Illuminate\Database\Eloquent\Builder */ public function scopeForCompany($query, int $companyId) { return $query->where('user_permissions_bus_id', $companyId); } /** * Scope to get permissions with specific permission. * * @param \Illuminate\Database\Eloquent\Builder $query * @param string $permission * @return \Illuminate\Database\Eloquent\Builder */ public function scopeWithPermission($query, string $permission) { return $query->where('user_permissions_permission', $permission); } }