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; } } if ($attribute === '2fa') { // two factor only works for internal users and // can only be activated by the logged-in user for himself return $subject->isInternalUser() && $subject->getId() === $user->getId(); } $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); } }