D8 Usuarios (Users) y Roles - pierregermain/MyDrupal GitHub Wiki
- Obtener el usuario actual
- Control de Acceso y cachear acceeso por usuario
- La Entidad User
- Operaciones CRUD y hooks de Entity API
- UserData
- Otras clases y servicios de usuarios
Obtener el usuario actual
- Servicio:
current_user
- Clase: Drupal\Core\Session\AccountProxy
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
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