getUser(); if (!$user instanceof User) { return false; } switch ($attribute) { case self::VIEW: return $this->canView($subject, $user, $token); case self::EDIT: case self::PASSWORD: return $this->canEdit($subject, $user, $token); case self::DELETE: return $this->canDelete($subject, $user, $token); case self::CREATE: // create actually passes in the current user as $subject, not the new one case self::ROLES: return $this->canAdminUsers($token); case self::PREFERENCES: return $this->canEditPreferences($subject, $user, $token); } return false; } /** * @param User $profile * @param User $user * @param TokenInterface $token * @return bool */ protected function canEditPreferences(User $profile, User $user, TokenInterface $token) { return $profile->getId() == $user->getId(); } /** * @param User $profile * @param User $user * @return bool */ protected function canView(User $profile, User $user, TokenInterface $token) { if ($this->canEdit($profile, $user, $token)) { return true; } return $profile->getId() == $user->getId(); } /** * @param User $profile * @param User $user * @return bool */ protected function canEdit(User $profile, User $user, TokenInterface $token) { if ($this->canAdminUsers($token)) { return true; } return $profile->getId() == $user->getId(); } /** * @param User $profile * @param User $user * @return bool */ protected function canDelete(User $profile, User $user, TokenInterface $token) { return false; } /** * @param TokenInterface $token * @return bool */ protected function canAdminUsers(TokenInterface $token) { return $this->isFullyAuthenticated($token) && $this->hasRole('ROLE_SUPER_ADMIN', $token); } }