Actualizar usuarios

This commit is contained in:
2021-04-30 02:23:57 -04:00
parent 52e3e78c6e
commit 2510261b63
3 changed files with 100 additions and 19 deletions

View File

@@ -27,16 +27,7 @@ class UsuariosController extends Controller {
* @return JsonResponse
*/
public function get($id) {
if (str_starts_with($id, 'auth0')) {
$usuario = Usuario::where('auth0_id', urldecode($id))->first();
} else if (Uuid::isValid($id)) {
$usuario = Usuario::where('id', $id)->first();
} else {
return response()->json([
'error' => 'invalid_id',
'message' => 'El id debe ser un UUID valido'
]);
}
$usuario = Usuario::findByIdOrAuth0Id($id);
if (!$usuario) {
return response()->json([
@@ -49,6 +40,7 @@ class UsuariosController extends Controller {
}
/**
* Crea un nuevo usuario localmente y en auth0
* @throws ValidationException
*/
public function create(Request $request) {
@@ -71,14 +63,14 @@ class UsuariosController extends Controller {
return response()->json([
'error' => 'not_allowed',
'message' => 'El usuario no puede tiene permisos para crear usuarios'
]);
], 403);
}
// los administradores solo pueden crear usuarios en su propio restaurant
if (!$request->user->restaurantes->contains($restaurant)) {
return response()->json([
'error' => 'not_allowed',
'message' => 'El usuario no puede crear un usuario en un restaurant al que no pertenece'
]);
], 403);
}
}
@@ -111,8 +103,75 @@ class UsuariosController extends Controller {
return response()->json(["usuario" => $usuario]);
}
public function update(Request $request) {
/**
* Actualiza un usuario, dado su id o auth0_id
* @param Request $request
* @param $id
* @return JsonResponse
* @throws ValidationException
*/
public function update(Request $request, $id) {
$this->validate($request, [
'nombre' => 'sometimes',
'email' => 'sometimes|email',
'username' => 'sometimes',
'password' => 'sometimes',
'roles' => 'sometimes|array',
'roles.*' => ['sometimes', Rule::in(['admin', 'mesero', 'recaudador', 'productor'])],
]);
$usuario = Usuario::findByIdOrAuth0Id($id);
if (!$usuario) {
return response()->json([
'error' => 'not_found',
'message' => 'El usuario con id ' . $id . ' no existe'
], 404);
}
// solo un global admin puede modificar usuarios en cualquier restaurant
if (!in_array('global_admin', $request->user->roles)) {
// si el usuario no es administrador no puede modificar usuarios
if (!in_array('admin', $request->user->roles)) {
return response()->json([
'error' => 'not_allowed',
'message' => 'El usuario no puede tiene permisos para modificar usuarios'
], 403);
}
// los administradores solo pueden modificar usuarios en sus propio restaurantes
if ($request->user->restaurantes->intersect($usuario->restaurantes)->count() == 0) {
return response()->json([
'error' => 'not_allowed',
'message' => 'El usuario no puede modificar un usuario en un restaurant al que no pertenece'
], 403);
}
}
$metadata = [];
if ($request->input('roles'))
$metadata['roles'] = $request->input('roles');
$auth0 = app(Auth0Service::class);
$auth0User = $auth0->updateUser(
auth0_id: $usuario->auth0_id,
email: $request->input('email'),
username: $request->input('username'),
password: $request->input('password'),
metadata: $metadata
);
if (array_key_exists('error', $auth0User)) {
return response()->json([
'error' => $auth0User['errorCode'],
'message' => $auth0User['message'],
], $auth0User['statusCode']);
}
if ($request->input('nombre'))
$usuario->nombre = $request->input('nombre');
$usuario->save();
return response()->json(["usuario" => $usuario]);
}
public function delete(Request $request) {