getUser(); if (!$user instanceof User) { return false; } if ($subject instanceof Notification) { switch ($attribute) { case self::COMMENT_ADD: return false === $subject->isSystem() && ( $subject->getAddressees()->contains($user) || $subject->getSender() === $user ); case self::NOTIFICATION_SEE: case self::NOTIFICATION_TOGGLE_READ_STATUS: return $subject->getSender() === $user || $subject->getAddressees()->contains($user); case self::NOTIFICATION_UPDATE: return $subject->getSender() === $user && false === $subject->isSystem(); default: throw new UnexpectedValueException("this subject {$attribute} is not implemented"); } } elseif ($subject instanceof NotificationComment) { switch ($attribute) { case self::COMMENT_ADD: return false === $subject->getNotification()->isSystem() && ( $subject->getNotification()->getAddressees()->contains($user) || $subject->getNotification()->getSender() === $user ); case self::COMMENT_EDIT: return $subject->getCreatedBy() === $user && false === $subject->getNotification()->isSystem(); default: throw new UnexpectedValueException("this subject {$attribute} is not implemented"); } } throw new UnexpectedValueException(); } }