D8 Usuarios (Users) y Roles - pierregermain/MyDrupal GitHub Wiki

Obtener el usuario actual

Métodos más usados:

  • getAccountName()
  • getDisplayName()
  • getEmail()
  • getRoles
  • id()
  • isAnonymous()
  • isAuthenticated()
  • hasPermission($permission)
  • etc.

Control de Acceso y cachear acceeso por usuario

  protected function blockAccess(AccountInterface $account) {
    if ($this->currentUser->hasPermission('access content')) {
      $result =  AccessResult::allowed();
    }
    else {
      $result = AccessResult::forbidden();
    }
    $result->cachePerUser();
    return $result;
  }

Métodos mas usados

  • getCacheMaxAge(). Devuelve el tiempo de caché para este objeto de validación, disponible en la propiedad $this->cacheMaxAge.
  • addCacheContexts(). Añade contextos o condiciones adicionales de caché.
  • cachePerPermissions(). Añade el contexto de caché 'user.permissions', indicando que el resultado de la validación AccessResult se puede cachear por permisos.
  • cachePerUser(). Añade el contexto de caché 'user', indicando que el resultado de la validación AccessResult se puede cachear por usuario.

La Entidad User

User

Cargar usuario by uid

use Drupal\user\Entity\User;
$user = User::load(\Drupal::currentUser()->id());

Operaciones CRUD y hooks de Entity API

Entity Type Manager

  • Permite gestionar entidades
$user_storage = \Drupal::entityTypeManager()->getStorage('user');

Métodos más usados

$admin = $user_storage->load(1);
$selected_users = [4, 13, 27];
$accounts = $user_storage->loadMultiple($selected_users);
$accounts = $user_storage->loadByProperties(['name' => $username,
'status' => 1]);
$new_user = $user_storage->create([
  'name' => 'test_user',
  'mail' => '[email protected]',
  'pass' => '123456',
]);
$new_user->save();
delete(array $entities).

Hooks

  • hook_ENTITY_TYPE_create($entity)

  • hook_ENTITY_TYPE_presave($entity)

  • hook_ENTITY_TYPE_insert($entity).

  • hook_ENTITY_TYPE_update($entity).

  • hook_ENTITY_TYPE_load($entities).

  • hook_ENTITY_TYPE_predelete($entity).

  • hook_ENTITY_TYPE_delete($entity).

  • hook_user_cancel($edit, $account, $method).

  • hook_user_cancel_methods_alter(&$methods).

hook_user_format_name_alter(&$name,$account)

/**
 * Implements hook_user_format_name_alter().
 * Replaces username with (*) on all the Drupal UI
 */
function mymodule_users_user_format_name_alter(&$name, AccountInterface $account) {
  $length = strlen($name);
  $times = $length - 4;
  if ($length > 4) {
    $begin = substr($name, 0, 2);
    $end = substr($name, -2);
    $rest = str_repeat('*', $times);
    $name = $begin . $rest . $end;
  }
}

hook_user_login($account).

/**
 * Implements hook_user_login().
 */
function mymodule_users_user_login(UserInterface $account) {
  $date = date("Y-m-d", $account->getLastAccessedTime());
  $message = "Gracias por volver, no entrabas desde el " . $date;
  \Drupal::messenger()->addStatus(t($message));
}
  • hook_user_logout($account).

UserData

Servicio: user.data
Clase: Drupal\user\UserData

Guarda información adicional de usuarios. Usa la tabla users_data, tabla que permite que otros módulos almacenen información adicional de los usuarios.

Métodos:

  • get($module, $uid = NULL, $name = NULL).
  • set($module, $uid, $name, $value).
  • delete($module = NULL, $uid = NULL, $name = NULL).

Ejemplo:

$myvariable = \Drupal::service('user.data')->get('mymodule', $account->id(),
'myvariable');

//..

\Drupal::service('user.data')->set('mymodule', $account->id(), 'myvariable', 'myvalue');

Otras clases y servicios de usuarios

Role

Crear rol de forma pragmática:

$role = \Drupal\user\Entity\Role::create(['id' => 'client',
'label' => 'Client']);
$role->save();

Cambiar de rol

Servicio: account_switcher
Clase: AccountSwitcher