/**
  * Set a particular atom on a user
  *
  * @param User $user
  * @param      $key
  * @param      $value
  */
 public function setAtom(User $user, $key, $value)
 {
     $conn = $this->getEntityManager()->getConnection();
     $stmt = $conn->prepare('INSERT INTO users_atoms ( user_id, `key`, `value`) VALUES( ?, ?, ? ) ON DUPLICATE KEY UPDATE `value`=VALUES(`value`)');
     $user_id = $user->getId();
     $stmt->bindParam(1, $user_id);
     $stmt->bindParam(2, $key);
     $stmt->bindParam(3, $value);
     $stmt->execute();
 }
 function it_should_not_panic_when_guards_are_not_defined(ServiceManager $serviceManager, RoleMapper $roleMapper, GroupPermissionProviderInterface $ruleMapper, UserPermissionProviderInterface $userActionRuleMapper, AuthenticationService $authenticationService, User $user, UserMapper $userMapper)
 {
     $config = ['circlical' => ['user' => ['providers' => ['role' => RoleMapper::class, 'rule' => ['group' => GroupPermissionProviderInterface::class, 'user' => UserPermissionProviderInterface::class]]]]];
     $user->getId()->willReturn(1);
     $authenticationService->getIdentity()->willReturn($user);
     $serviceManager->get('config')->willReturn($config);
     $serviceManager->get(RoleMapper::class)->willReturn($roleMapper);
     $serviceManager->get(GroupPermissionProviderInterface::class)->willReturn($ruleMapper);
     $serviceManager->get(UserPermissionProviderInterface::class)->willReturn($userActionRuleMapper);
     $serviceManager->get(AuthenticationService::class)->willReturn($authenticationService);
     $serviceManager->get(UserMapper::class)->willReturn($userMapper);
     $this->shouldThrow(\Exception::class)->during('__invoke', [$serviceManager, AccessService::class]);
 }
 /**
  * Flattens roles using the roleProvider, for quick lookup.
  */
 private function compileUserRoles()
 {
     if ($this->userRoles !== null) {
         return;
     }
     if (!$this->user) {
         $this->userRoles = [];
         return;
     }
     $roleList = [];
     $roleExpansion = [];
     /** @var Role $role */
     foreach ($this->roleProvider->getAllRoles() as $role) {
         $roleList[$role->getId()] = $role;
     }
     /** @var Role $userRole */
     $userRoles = $this->user->getRoles();
     if ($userRoles) {
         foreach ($userRoles as $userRole) {
             $roleExpansion[] = $userRole->getName();
             $parentRole = $userRole->getParent();
             while ($parentRole) {
                 $roleExpansion[] = $parentRole->getName();
                 $parentRole = $parentRole->getParent();
             }
         }
     }
     $this->userRoles = array_unique($roleExpansion);
 }
 public function it_requires_that_users_have_id_during_creation(User $otherUser)
 {
     $otherUser->getId()->willReturn(null);
     $this->shouldThrow(PersistedUserRequiredException::class)->during('create', [$otherUser, 'whoami', 'nobody']);
 }
 /**
  * Very similar to create, except that it won't log the user in.  This was created to satisfy circumstances where
  * you are creating users from an admin panel for example.  This function is also used by create.
  *
  * @param User   $user
  * @param string $username
  * @param string $password
  *
  * @return AuthenticationRecordInterface
  * @throws EmailUsernameTakenException
  * @throws MismatchedEmailsException
  * @throws PersistedUserRequiredException
  * @throws UsernameTakenException
  */
 public function registerAuthenticationRecord(User $user, string $username, string $password) : AuthenticationRecordInterface
 {
     if (!$user->getId()) {
         throw new PersistedUserRequiredException("Your user must have an ID before you can create auth records with it");
     }
     if ($this->authenticationProvider->findByUsername($username)) {
         throw new UsernameTakenException();
     }
     if (filter_var($username, FILTER_VALIDATE_EMAIL)) {
         if ($user->getEmail() != $username) {
             throw new MismatchedEmailsException();
         }
         if ($emailUser = $this->userProvider->findByEmail($username)) {
             if ($emailUser != $user) {
                 throw new EmailUsernameTakenException();
             }
         }
     }
     $hash = password_hash($password, PASSWORD_DEFAULT);
     $auth = $this->authenticationProvider->create($user->getId(), $username, $hash, KeyFactory::generateEncryptionKey()->getRawKeyMaterial());
     $this->authenticationProvider->save($auth);
     return $auth;
 }
 function it_rejects_users_with_no_id(User $noUser)
 {
     $noUser->getId()->willReturn(null);
     $this->shouldThrow(UserRequiredException::class)->during('setUser', [$noUser]);
 }