permissionManager = $permissionManager; } /** * @param string $attribute * @param mixed $subject * @return bool */ protected function supports($attribute, $subject) { if (!($subject instanceof User)) { return false; } if (!\in_array($attribute, self::ALLOWED_ATTRIBUTES)) { return false; } return true; } /** * @param string $attribute * @param User $subject * @param TokenInterface $token * @return bool */ protected function voteOnAttribute($attribute, $subject, TokenInterface $token) { $user = $token->getUser(); if (!($user instanceof User)) { return false; } if ($attribute === 'view_team_member') { if ($subject->getId() !== $user->getId()) { return false; } return $this->permissionManager->hasRolePermission($user, 'view_team_member'); } if ($attribute === 'delete') { if ($subject->getId() === $user->getId()) { return false; } return $this->permissionManager->hasRolePermission($user, 'delete_user'); } if ($attribute === 'password') { if (!$subject->isInternalUser()) { return false; } } $permission = $attribute; // extend me for "team" support later on if ($subject->getId() === $user->getId()) { $permission .= '_own'; } else { $permission .= '_other'; } $permission .= '_profile'; return $this->permissionManager->hasRolePermission($user, $permission); } }