Actualizar usuarios
This commit is contained in:
@@ -27,16 +27,7 @@ class UsuariosController extends Controller {
|
|||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function get($id) {
|
public function get($id) {
|
||||||
if (str_starts_with($id, 'auth0')) {
|
$usuario = Usuario::findByIdOrAuth0Id($id);
|
||||||
$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'
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$usuario) {
|
if (!$usuario) {
|
||||||
return response()->json([
|
return response()->json([
|
||||||
@@ -49,6 +40,7 @@ class UsuariosController extends Controller {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Crea un nuevo usuario localmente y en auth0
|
||||||
* @throws ValidationException
|
* @throws ValidationException
|
||||||
*/
|
*/
|
||||||
public function create(Request $request) {
|
public function create(Request $request) {
|
||||||
@@ -71,14 +63,14 @@ class UsuariosController extends Controller {
|
|||||||
return response()->json([
|
return response()->json([
|
||||||
'error' => 'not_allowed',
|
'error' => 'not_allowed',
|
||||||
'message' => 'El usuario no puede tiene permisos para crear usuarios'
|
'message' => 'El usuario no puede tiene permisos para crear usuarios'
|
||||||
]);
|
], 403);
|
||||||
}
|
}
|
||||||
// los administradores solo pueden crear usuarios en su propio restaurant
|
// los administradores solo pueden crear usuarios en su propio restaurant
|
||||||
if (!$request->user->restaurantes->contains($restaurant)) {
|
if (!$request->user->restaurantes->contains($restaurant)) {
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'error' => 'not_allowed',
|
'error' => 'not_allowed',
|
||||||
'message' => 'El usuario no puede crear un usuario en un restaurant al que no pertenece'
|
'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]);
|
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) {
|
public function delete(Request $request) {
|
||||||
|
|||||||
@@ -27,6 +27,14 @@ class Usuario extends Model {
|
|||||||
protected $table = 'usuarios';
|
protected $table = 'usuarios';
|
||||||
protected $appends = ['roles'];
|
protected $appends = ['roles'];
|
||||||
|
|
||||||
|
public static function findByIdOrAuth0Id($id) {
|
||||||
|
if (str_starts_with($id, 'auth0')) {
|
||||||
|
return Usuario::where('auth0_id', urldecode($id))->first();
|
||||||
|
} else {
|
||||||
|
return Usuario::where('id', $id)->first();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public function restaurantes() {
|
public function restaurantes() {
|
||||||
return $this->belongsToMany(Restaurante::class, 'usuarios_restaurantes', 'usuario_id', 'restaurante_id');
|
return $this->belongsToMany(Restaurante::class, 'usuarios_restaurantes', 'usuario_id', 'restaurante_id');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,12 +49,7 @@ class Auth0Service extends ServiceProvider {
|
|||||||
->json();
|
->json();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function createUser(
|
public function createUser($email, $username, $password, $metadata) {
|
||||||
$email,
|
|
||||||
$username,
|
|
||||||
$password,
|
|
||||||
$metadata,
|
|
||||||
) {
|
|
||||||
$endpoint = env('AUTH0_DOMAIN') . 'api/v2/users';
|
$endpoint = env('AUTH0_DOMAIN') . 'api/v2/users';
|
||||||
|
|
||||||
$payload = [
|
$payload = [
|
||||||
@@ -70,4 +65,23 @@ class Auth0Service extends ServiceProvider {
|
|||||||
->post($endpoint, $payload)
|
->post($endpoint, $payload)
|
||||||
->json();
|
->json();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function updateUser($auth0_id, $email, $username, $password, $metadata) {
|
||||||
|
$endpoint = env('AUTH0_DOMAIN') . 'api/v2/users/' . $auth0_id;
|
||||||
|
|
||||||
|
$payload = ["connection" => env('AUTH0_CONNECTION')];
|
||||||
|
|
||||||
|
if ($email)
|
||||||
|
$payload["email"] = $email;
|
||||||
|
if ($username)
|
||||||
|
$payload["username"] = $username;
|
||||||
|
if ($password)
|
||||||
|
$payload["password"] = $password;
|
||||||
|
if ($metadata)
|
||||||
|
$payload["app_metadata"] = $metadata;
|
||||||
|
|
||||||
|
return Http::withToken($this->getToken())
|
||||||
|
->patch($endpoint, $payload)
|
||||||
|
->json();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user