You are here

protected function UserRoleAdd::doExecute in Rules 8.3

Assign role to a user.

Parameters

\Drupal\user\UserInterface $user: User object.

\Drupal\user\RoleInterface[] $roles: Array of UserRoles to assign.

Throws

\Drupal\rules\Exception\InvalidArgumentException

File

src/Plugin/RulesAction/UserRoleAdd.php, line 51

Class

UserRoleAdd
Provides a 'Add user role' action.

Namespace

Drupal\rules\Plugin\RulesAction

Code

protected function doExecute(UserInterface $user, array $roles) {
  foreach ($roles as $role) {

    // Skip adding the role to the user if they already have it.
    if (!$user
      ->hasRole($role
      ->id())) {

      // If you try to add anonymous or authenticated role to user, Drupal
      // will throw an \InvalidArgumentException. Anonymous or authenticated
      // role ID must not be assigned manually.
      try {
        $user
          ->addRole($role
          ->id());
      } catch (\InvalidArgumentException $e) {
        throw new InvalidArgumentException($e
          ->getMessage());
      }

      // Set flag that indicates if the entity should be auto-saved later.
      $this->saveLater = TRUE;
    }
  }
}