*/ protected $connection = 'mysql'; protected $fillable = [ 'organization_id', 'person_id', 'name', 'email', 'username', 'password', 'phone', 'otp', 'otp_created_at', 'role_id' ]; /** * The attributes that should be hidden for serialization. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; /** * The attributes that should be cast. * * @var array */ protected $casts = [ 'email_verified_at' => 'datetime', 'otp_created_at' => 'datetime' ]; public $with = [ 'metas', 'person', 'role', ]; public $appends = [ 'meta', 'avatar_url', 'full_name', 'permissions' ]; public function getAvatarUrlAttribute() { return asset('images/specialities/anak.png'); } public function getFullNameAttribute() { return $this->person?->full_name; } public function getMetaAttribute() { $orgMeta = []; foreach ($this->metas as $meta) { $orgMeta[$meta->type] = $meta->value; } return (object) $orgMeta; } public function getPermissionsAttribute() { $roleId = $this->role_id; if (!$roleId) { return []; } // Ambil permissions dari role_has_permissions dan permissions tabel $permissions = DB::table('role_has_permissions') ->join('permissions', 'role_has_permissions.permission_id', '=', 'permissions.id') ->where('role_has_permissions.role_id', $roleId) ->select('permissions.id', 'permissions.name', 'permissions.guard_name') ->get(); return $permissions; } public function managedCorporates() { return $this->belongsToMany(Corporate::class, 'corporate_manager', 'user_id', 'corporate_id'); } public function metas() { return $this->morphMany(Meta::class, 'metaable'); } public function person() { return $this->belongsTo(Person::class, 'person_id'); } public function role() { return $this->belongsTo(Role::class, 'role_id'); } public function ownedPersons() { return $this->hasMany(Person::class, 'owner_user_id'); } public function getOrganization() { return $this->hasOne(OrganizationUser::class, 'user_id'); } public function notificationTokens() { return $this->morphMany(NotificationToken::class, 'notifiabletoken'); } public function routeNotificationForFcm() { return $this->notificationTokens()->orderBy('created_at', 'desc')->pluck('token')->toArray(); } }