Usuarios (Users)


Routes

Method URI Action
GET /users index
GET /users/{id} show
POST /users store
PATCH /users/{id} update
DELETE /users/{id} soft delete
PATCH /users/{id}/email update email
PATCH /users/{id}/password update password
POST /users/{id}/profile-picture update profile_picture
POST /users/bulk-password-update custom update

Model Attributes

{
  "id": 1,
  "type": 2,
  "name": "student",
  "email": "student@idc.com",
  "enabled": true,
  "permissions": {
     "create": false,
     "read": true,
     "update": false,
     "delete": false
  },
  "profile_picture": null,     // Se actualiza cuando se sube una foto de perfil
  "email_verified_at": null,   // Se actualiza cuando se confirma la cuenta
  "last_login_at": null,       // Se actualiza cada vez que el usuario realizar el /login
  "confirmation_token": null,  // Esto sirve para los correos de autenticacion que necesiten un token de confirmación
  "created_at": "2020-03-03 01:45:40",
  "updated_at": "2020-03-03 01:45:40",
  "deleted_at": null
}

User Types

Type Value
Student 1
Teacher 2
Coordinator 3
Low Admin 4
Admin 5

Permissions Primera Fase

Los permisos indican que acciones CRUD puede un usuario realizar en los modulos que puedan acceder. Permitiendo siempre READ por defecto. Los modulos que tenga permitido acceder ya depende del type del usuario.

Cuando un usuario es creado se le aplica permisos por defecto dependiendo del tipo, pero estos se puede modificar libremente luego con el metodo update.

{info} No se le puede actualizar permisos a low admin y admin.

Admin and Low Admin

{
  "permissions": {
     "create": true,
     "read": true,
     "update": true,
     "delete": true
  }
}

Coordinator and Teacher

{
  "permissions": {
     "create": true,
     "read": true,
     "update": true,
     "delete": false
  }
}

Student

{
  "permissions": {
     "create": false,
     "read": true,
     "update": false,
     "delete": false
  }
}

Index

Route GET /users

Policies

  • admin

Filters extends QueryFilters

Filter Description
type=int Filtra por tipo de usuario
search=string Busca a traves de name y email
enabled Obtiene los usuarios deshabilitados

Store

Route POST /users

Policies

  • admin

Request Body

{
  "name": "required|string",
  "email": "required|email|unique:users",
  "type": "required|integer|in:4,5", // admin group types

  "profile_picture": "image"
}

Update

Route PATCH /users/{id}

Policies

  • admin

Rules

  • No se puede degradar un admin a low admin, si el target es el ultimo admin del sistema
  • Un admin no puede actualizar otro admin

Request Body

{
  "name":  "string",
  "enabled": "boolean",

  "permissions": { // only when target user is not admin or low admin. read permissions cannot be changed
    "created": "boolean",
    "update": "boolean",
    "delete": "boolean"
  },

  "type": "integer|in:4,5" // only when target user is admin or low admin.
}

Soft Delete

{primary} No se puede dejar el sistema sin administradores. Si se detecta que el target user es el último admin se negara la acción.

Route DELETE /users/{id}

Policies

  • admin

Actualizar Correo

Route PATCH /users/{id}/email

Policies

  • user relacionado

Request Body

{
  "new_email": "required|email",
  "password": "required|string" // user current password
}

Actualizar Contraseña

Route PATCH /users/{id}/password

Policies

  • usuario relacionado

Request Body

{
  "password": "required|string",  // user current password
  "new_password": "required|string",
  "new_password_confirmation": "required|string|same:new_password"
}

Actualizar Foto de Perfil

Sirve para cualquier tipo de usuario

Route POST /users/{id}/profile-picture

Policies

  • admin
  • user relacionado

Request Body

{
  "profile_picture": "required|image"
}

Response 204 No Content


Actualizar Contraseña Por Lotes

Esta acción ofrece 2 modos de interacción


Enviar Correo

Para cada usuario genera un token de password reset y le envia la notifiacion de Restaurar Contraseña


Forzar Actualización

Para todos los usuarios seleccionados se actualiza su contraseña a la proveniente en new_password


A demás de eso se puede especificar un grupo de usuarios (de cualquier rol) o enviar el valor de ['*'] para seleccionar a todos los usuarios existentes.

  • No afecta a los admin o low admin

Route POST /users/bulk-password-update

Policies

  • admin

Request Body

  • new_password solo es requerido y utilizado cuando mode === 'force_update'
  • Se utilizaran todos los usuarios existentes como targets si se detecta el value * en array de _target_userids
{
  "target_users_ids": "required|array",
  "target_users_ids.*": "integer", // aunque este marcado como integer si se detecta ['*'] pasara la validación
  "mode": "required|string|in:send_email,force_update",
  "new_password": "integer"       // Solo requerido cuando mode === force_update
}