getUser(); if (!($user instanceof User)) { return false; } $permission = ''; switch ($attribute) { // special case for the UserController case self::DELETE: if (!$this->canDelete($subject, $user, $token)) { return false; } return $this->hasRolePermission($user, 'delete_user'); // used in templates and ProfileController case self::VIEW: case self::EDIT: case self::API_TOKEN: case self::PASSWORD: case self::ROLES: case self::PREFERENCES: case self::HOURLY_RATE: $permission .= $attribute; break; default: return false; } $permission .= '_'; // extend me for "team" support later on if ($subject->getId() == $user->getId()) { $permission .= 'own'; } else { $permission .= 'other'; } $permission .= '_profile'; return $this->hasRolePermission($user, $permission); } /** * @param User $profile * @param User $user * @return bool */ protected function canDelete(User $profile, User $user, TokenInterface $token) { return $profile->getId() !== $user->getId(); } }